给出以下代码:
class Book {
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Review> Reviews { get; set; }
}
class Review {
public int ID { get; set; }
public int? Overall { get; set; }
public string Comment { get; set; }
}
假设我有一份数据库中每本书的清单:
var books; // List<Book>
我想向用户显示平均评论订购的图书。理想情况下,书籍列表的顶部平均评价最高,排序也会下降。鉴于我将评论中的整体评分视为无效整数,有些图书不会有评论,更不用说整体评分。我在排序这些数据时遇到了困难,我似乎尝试了以下各种组合:
books.OrderByDescending(b => b.Reviews.Average(a => a.Overall));
是否可以在不创建第二个列表的情况下对列表进行排序,以获得类似:
提前致谢。
答案 0 :(得分:1)
你应该能够使用它:
books.OrderByDescending(b =>
(b.Reviews == null) ? 0:b.Reviews.Average(r => r.Overall??0));
答案 1 :(得分:0)
谢谢你TheCodeKing指出我正确的方向。以下是解决问题的方法:
books.OrderByDescending(b => b.Reviews.Count() == 0 ? 0 : b.Reviews.Average(r => r.Overall ?? 0));