求和、排序、分组和顶部/接收Linq



我是LINQ的新手,我已经搜索了电路板,但其他q/a都没有给出完整的样本。我需要用LINQ查询一个强类型的IList<>对象,我必须:

  1. 按属性求和
  2. 按属性分组
  3. 与我求和的属性相同的属性的订单
  4. 将结果限制为前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);

相关内容

  • 没有找到相关文章

最新更新