我有一个包含以下数据的 Json 文件:
[
{ "Id": 510, "Title": "Big Start", "Author": [{ "AuthId": 7777, "Name": "Tom" }] },
{ "Id": 511, "Title": "Rising Tide", "Author": [{ "AuthId": 6666, "Name": "Bob" }] }
]
对于上述内容,我定义了以下类:
public class Book {
public int Id { get; set; }
public string Title { get; set; }
public List<Author> Authors { get; set; }
}
public class Author {
public int AuthId { get; set; }
public string Name { get; set; }
}
我使用以下代码反序列化了 json 数据:
List<Book> books;
using (StreamReader sr = new StreamReader(Server.MapPath("...")))
{
books = JsonConvert.DeserializeObject<List<Item>>(sr.ReadToEnd()).ToList()
}
现在我想使用作者姓名对书籍列表进行排序。我尝试了以下方法:
var list = books.OrderBy(b => b.Author.OrderBy(a => a.Name)).ToList();
但是我收到错误消息“至少一个对象必须实现 IComparable”。
有人可以帮我使用嵌套的作者 Name对上面的列表进行排序吗?
提前致谢。
问题是,作者是一个列表,那么我们按哪个作者姓名排序?可能有很多。“阿尔弗雷德和宙斯的第一本书”、“齐戈、玛丽和艾达的第二本书”——这些书是如何分类的?如果 Book2 是 Ada、Mary 和 Zigo 的作品,他们如何排序?
如果只有一个作者,那就很简单了
var list = books.OrderBy(b => b.Authors.First().Name).ToList();
由于作者是一个列表,您也可以将其编入索引
var list = books.OrderBy(b => b.Authors[0].Name).ToList();
如果有不止一个作者,您需要考虑使用哪个作者进行排序。但是你需要考虑是否也要对作者进行排序..
请记住,c# 是区分大小写的,因此“bob”将在“Tom”之后排序,并且如果这里有零位作者,上面的代码也将不起作用 - 您已经暗示总会有一个,但如果不是,请考虑FirstOrDefault()?.Name??""
..
..有时最简单的问题会导致最复杂的工作!;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句