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