我是LINQ的新手,我已经搜索了电路板,但其他q/a都没有给出完整的样本。我需要用LINQ查询一个强类型的IList<>
对象,我必须:
- 按属性求和
- 按属性分组
- 与我求和的属性相同的属性的订单
- 将结果限制为前2名
例如,如果我的数据是这样的:
Id | Customer | CartTotal
-------------------------------
1 | a | 100
2 | a | 50
3 | b | 110
4 | b | 128
5 | c | 75
6 | c | 30
我的结果需要是这样的,我把它限制在前2位,按客户分组,并在CartTotal上做了一个总结:
Customer | CartTotal
----------------------
b | 238
a | 150
实现这一目标的最佳方式是什么?
var query = carts.GroupBy(c => c.Customer)
.Select(g => new { Customer = g.Key, Total = g.Sum(p => p.CartTotal)})
.OrderByDescending(c => c.Total)
.Take(2);
这都是将正确的扩展方法链接在一起的问题。我们想先按客户分组-GroupBy
,然后为每个分组项目按客户和购物车总数分组-Select
,按购物车总数降序排序-OrderByDescending
,最后取前2名-Take
:
var results = customerOrders.GroupBy(c=> c.Customer)
.Select(g=> new
{
Customer = g.Key,
CartTotal = g.Sum(x=>x.CartTotal)
})
.OrderByDescending(x=> x.CartTotal)
.Take(2);