2011-04-18 69 views
0

在下面的代码中,我希望在deptGroup的每个分组中分别为OBFY和CFY做一笔总和。任何人有任何想法,我已经尝试了coupla的东西,但无法得到它。谢谢!!LINQ:如何总结使用方法风格linq分组?

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

回答

2

在我看来,你是过度使用DataRow s。如果你在一个不错的班有你的数据,你可以写这样的:

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()使用是否会对这个查询的第一部分没有任何影响,但它肯定不会对分组有任何影响。