如何使用嵌套属性使用 LINQ 对列表进行排序

质量保证

我有一个包含以下数据的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用linq对嵌套列表进行排序

如何使用Linq对列表顺序进行排序?

组,使用Linq对元组进行排序的列表

如何在 Linq C# 中使用嵌套字典对列表进行排序?

c#Linq按嵌套列表的成员对列表进行排序

在LINQ C#中使用where条件对列表进行排序

在 C# 中使用 LINQ 按范围对列表进行排序

通过使用linq比较两个列表进行排序?

如何使用Linq使用另一个列表的值对列表进行排序

使用 linq 按对象的 2 个属性对对象列表进行排序

C#、LINQ 一种通用排序方法,可按对象属性和嵌套属性对列表进行排序

C#如何使用linq按索引对文件列表进行排序

如何对数字字符串列表进行排序?最好使用LINQ

问:使用Linq通过内部列表对对象列表进行排序

与使用linq的列表进行比较

使用 LINQ 嵌套列表索引

如何使用Linq对列表进行分组

如何使用 LINQ 在 C# 中按降序对嵌套字典进行排序

使用Linq根据每个项目中值的总和对列表进行排序

使用linq根据唯一键对列表对象进行排序

使用排序函数对列表的嵌套列表进行排序。?

使用linq对List <string>的数组进行排序

使用 LINQ 对 List 中的偶数进行排序

使用Linq连续对多行查询进行排序

使用LINQ对实体进行自然排序

如何在Linq中按与数组匹配的单词数对字符串列表进行排序

C# - 如何按 linq 对列表字符串编号进行排序?

使用linq更改列表的属性

如何使用 linq 查询带有嵌套列表的对象?