LINQ:如何使用方法样式linq对分组进行求和?

时间:2011-04-18 20:30:44

标签: linq grouping sum

在下面的代码中,我想在deptGroup的每个分组中分别为OBFY和CFY做一笔总和。任何人有任何想法,我尝试过coupla的东西,但无法得到它。谢谢!

  var deptGroup = prodCostsTotals.AsQueryable()
                                 .Select(r => dt.Rows.Add(new object[]
                                     {   
                                       Convert.ToInt32(r.Field<string>("Proc")),  
                                       r.Field<string>("UnitL"),
                                       r.Field<Decimal?>("OBFY"),
                                       r.Field<Decimal?>("CFY")
                                     })).GroupBy(g => g.Field<string>("Proc"));

1 个答案:

答案 0 :(得分:2)

在我看来,你过度使用DataRow。如果你的数据是一个很好的类,你可以这样写:

data.GroupBy(x => x.Proc)
    .Select(g => new
                 {
                     Proc = g.Key,
                     OBFYSum = g.Sum(x => x.OBFY),
                     CFYSum = g.Sum(x => x.CFY)
                 })

但如果你真的想从DataTable开始并将中间结果添加到另一个DataTable,你可以这样做:

prodCostsTotals.AsQueryable()
               .Select(r => dt.Rows.Add(new object[]
                   {   
                     Convert.ToInt32(r.Field<string>("Proc")),  
                     r.Field<string>("UnitL"),
                     r.Field<Decimal?>("OBFY"),
                     r.Field<Decimal?>("CFY")
                   }))
               .GroupBy(g => g.Field<string>("Proc"))
               .Select(g => new
                 {
                     Proc = g.Key,
                     OBFYSum = g.Sum(x => x.Field<Decimal?>("OBFY")),
                     CFYSum = g.Sum(x => x.Field<Decimal?>("CFY"))
                 })

请注意,我不知道您对AsQueryable()的使用是否会对此查询的第一部分产生任何影响,但它肯定不会对分组产生任何影响。