C# 基于lambda表达式嵌套列表值平均值的C订单列表

C# 基于lambda表达式嵌套列表值平均值的C订单列表,c#,lambda,C#,Lambda,我想知道是否可以使用lambda表达式根据嵌套项目列表的平均值对项目列表进行排序 在项目方面,我有一个产品列表,每个产品都可以有很多评论。我想根据每个产品的评论列表中的平均评分来订购产品列表 我有这个: products = category.Products.OrderBy(i => i.Reviews.Average(x => x.Rating)); 这个构建没有问题,但是当我运行它时,它返回一个错误 序列不包含任何元素 是否可以使用lambda表达式执行此操作?您的一款产品可

我想知道是否可以使用lambda表达式根据嵌套项目列表的平均值对项目列表进行排序

在项目方面,我有一个产品列表,每个产品都可以有很多评论。我想根据每个产品的评论列表中的平均评分来订购产品列表

我有这个:

products = category.Products.OrderBy(i => i.Reviews.Average(x => x.Rating));
这个构建没有问题,但是当我运行它时,它返回一个错误

序列不包含任何元素


是否可以使用lambda表达式执行此操作?

您的一款产品可能没有评论。你应该决定给它什么评级,比如说99,因为你希望它出现在结尾,所以:

category.Products.OrderBy(p=>p.Reviews.Count > 0 ?
                          p.Reviews.Average(r=>r.Rating) : 99);
Enumerable.Average抛出InvalidOperationException,因为序列不包含元素,因为产品没有评审

您可以使用:

也许您想从结果中排除这些产品:

products = category.Products
    .Where(p => p.Reviews.Any())
    .OrderBy(p => p.Reviews.Average(r => r.Rating));

当i.Reviews有0个元素时,你预计会发生什么?如果没有评论,平均值是多少?啊。。。我的错误。谢谢你指出这是我需要的,只是我需要降序。非常感谢。用Any代替Count。否则,必须枚举和计算整个序列,以获得计数,以防Reviews不是ICollection,而是IEnumerable。
products = category.Products
    .Where(p => p.Reviews.Any())
    .OrderBy(p => p.Reviews.Average(r => r.Rating));