Asp.net mvc 3 按平均值(包括可为空的值)对ICollection进行降序排序
给定以下代码:Asp.net mvc 3 按平均值(包括可为空的值)对ICollection进行降序排序,asp.net-mvc-3,entity-framework-ctp5,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 st
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; }
}
是否可以在不创建第二个列表的情况下对我的列表进行排序,以获得如下结果:
- A册(4.5/5)
- B册(4.3/5)
- C册(3.9/5)
- D册(3.5/5)
- E册(-/5)
- F册(-/5)
提前感谢。您应该能够使用以下功能:
books.OrderByDescending(b =>
(b.Reviews == null) ? 0:b.Reviews.Average(r => r.Overall??0));
谢谢你的代码为我指明了正确的方向。以下是解决问题的方法:
books.OrderByDescending(b => b.Reviews.Count() == 0 ? 0 : b.Reviews.Average(r => r.Overall ?? 0));
不幸的是,这并没有起作用,它抛出了一个无效的操作异常“sequence contains no elements”。谢谢。@jon-我认为您需要更仔细地验证错误消息。这些书有评论吗?@Ahmad,最初的问题是,鉴于一些书没有评论,我如何按平均评论对书籍列表进行排序?我将其解释为可为空的总体字段上的空值。我会更新的。
books.OrderByDescending(b =>
(b.Reviews == null) ? 0:b.Reviews.Average(r => r.Overall??0));
books.OrderByDescending(b => b.Reviews.Count() == 0 ? 0 : b.Reviews.Average(r => r.Overall ?? 0));