Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 按平均值(包括可为空的值)对ICollection进行降序排序_Asp.net Mvc 3_Entity Framework Ctp5 - Fatal编程技术网

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