按平均值降序的ICollection排序,包括可空值

时间:2011-09-09 23:32:19

标签: asp.net-mvc-3 entity-framework-ctp5

给出以下代码:

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));

是否可以在不创建第二个列表的情况下对列表进行排序,以获得类似:

  • 预订A(4.5 / 5)
  • B书(4.3 / 5)
  • 图书C(3.9 / 5)
  • 书D(3.5 / 5)
  • 书E( - / 5)
  • 书F( - / 5)

提前致谢。

2 个答案:

答案 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));