Pau*_*aul 1 c# lambda aggregate
我想按数量总和的降序对值列表进行排序,而不会覆盖数量的原始值.
所以,假设我的数据列表是:
Reason=Quality, Quantity=10
Reason=Quality, Quantity=10
Reason=Customer, Quantity=8
Reason=Carrier, Quantity=17
Reason=Customer, Quantity=1
Run Code Online (Sandbox Code Playgroud)
我如何执行lambda表达式来按总量排序?我希望得到以下内容:
Reason=Quality, Quantity=10
Reason=Quality, Quantity=10
Reason=Carrier, Quantity=17
Reason=Customer, Quantity=8
Reason=Customer, Quantity=1
Run Code Online (Sandbox Code Playgroud)
质量是第一位的,因为总价值是20.客户是最后的,因为总价值是1.
这就是我目前所拥有的,但无论如何都没有修改数据而不修改原始数据
eData.OrderByDescending(o => o.Quantity);
Run Code Online (Sandbox Code Playgroud)
我能想到完成这项任务的唯一方法是添加另一个变量并选择Select with Sum将所有新变量添加到该值,然后将OrderByDescending添加到该值上.但是,在我这样做之前,只想看看是否有更简单的方法.
您可以按项目对项目进行分组Reason,然后按Quantity每个组中的总和对组进行排序,然后使用分组将组展平为单个项目SelectMany.
var result =
eData
.GroupBy(x => x.Reason)
.OrderByDescending(g => g.Sum(x => x.Quantity))
.SelectMany(g => g)
.ToList();
Run Code Online (Sandbox Code Playgroud)