Получите сумму двух столбцов в одном запросе LINQ

скажем, то, что у меня есть таблица под названием Объекты (идентификационный интервал, Сделанный интервал, Общий интервал)

Я могу сделать это двумя запросами:

int total = m.Items.Sum(p=>p.Total)
int done = m.Items.Sum(p=>p.Done)

Но я хотел бы сделать это в одном запросе, чем-то вроде этого:

var x = from p in m.Items select new { Sum(p.Total), Sum(p.Done)};

Конечно, существует способ вызвать агрегатные функции от синтаксиса LINQ...?

60
задан Steven 12 March 2010 в 11:23
поделиться

3 ответа

Это поможет:

from p in m.Items
group p by 1 into g
select new
{
    SumTotal = g.Sum(x => x.Total), 
    SumDone = g.Sum(x => x.Done) 
};
86
ответ дан 24 November 2019 в 17:45
поделиться

С помощью вспомогательного класса кортежа, собственного или - в .NET 4 - стандартных, вы можете сделать следующее:

var init = Tuple.Create(0, 0);

var res = m.Items.Aggregate(init, (t,v) => Tuple.Create(t.Item1 + v.Total, t.Item2 + v.Done));

И res .Item1 - это сумма столбца Total и res.Item2 столбца Done .

3
ответ дан 24 November 2019 в 17:45
поделиться

Как насчет

   m.Items.Select(item => new { Total = item.Total, Done = item.Done })
          .Aggregate((t1, t2) => new { Total = t1.Total + t2.Total, Done = t1.Done + t2.Done });
9
ответ дан 24 November 2019 в 17:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: