C#Order List基于嵌套列表值与lambda表达式的平均值

Mik*_*Coy 0 c# lambda

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

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

我有这个:

products = category.Products.OrderBy(i => i.Reviews.Average(x => x.Rating));
Run Code Online (Sandbox Code Playgroud)

这种构建没有问题,但是当我运行它时,它会返回一个错误

序列不包含任何元素

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

Tim*_*ter 6

Enumerable.Average抛出InvalidOperationException因为序列不包含任何元素,因为产品没有Reviews.

你可以使用Enumerable.DefaultIfEmpty(customValue):

products = category.Products
    .OrderBy(i => i.Reviews.Select(r => r.Rating).DefaultIfEmpty(0).Average());
Run Code Online (Sandbox Code Playgroud)

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

products = category.Products
    .Where(p => p.Reviews.Any())
    .OrderBy(p => p.Reviews.Average(r => r.Rating));
Run Code Online (Sandbox Code Playgroud)