LINQ: Как суммировать по группировке, используя метод стиля linq? - PullRequest
0 голосов
/ 19 апреля 2011

В приведенном ниже коде я хотел бы сделать сумму для OBFY и CFY отдельно в каждой группе в deptGroup. У кого-нибудь есть идеи, я попробовал пару вещей, но не могу их получить. Спасибо !!

  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 Ответ

2 голосов
/ 19 апреля 2011

Мне кажется, вы злоупотребляете 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() на первую часть этого запроса, но, безусловно, это не повлияет на группировку.

...