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

#linq #grouping #sum

#linq #группировка #сумма

Вопрос:

В приведенном ниже коде я хотел бы суммировать для 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:

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