Linq中的Sum,Order,Group和Top / Take

时间:2012-02-09 02:25:55

标签: .net linq sum linq-group

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

  1. 财产总和
  2. 按物业分组
  3. 按照我在
  4. 上做的相同属性订购
  5. 将结果限制为前2
  6. 例如,如果我的数据是这样的:

     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
    

    实现这一目标的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

所有这些都是将正确的扩展方法链接在一起的问题。我们希望首先按客户分组 - 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);

答案 1 :(得分:1)

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);