Получите сумму двух столбцов в одном запросе 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
задан 12 March 2010 в 14:23

1 ответ

Используя поддержку языка кортежей, представленных в C# 7.0, можно решить это использование следующего выражения LINQ:

var itemSums = m.Items.Aggregate((Total: 0, Done: 0), (sums, item) => (sums.Total + item.Total, sums.Done + item.Done));

Полный пример кода:

var m = new
{
    Items = new[]
    {
        new { Total = 10, Done = 1 },
        new { Total = 10, Done = 1 },
        new { Total = 10, Done = 1 },
        new { Total = 10, Done = 1 },
        new { Total = 10, Done = 1 },
    },
};

var itemSums = m.Items.Aggregate((Total: 0, Done: 0), (sums, item) => (sums.Total + item.Total, sums.Done + item.Done));

Console.WriteLine($"Sum of Total: {itemSums.Total}, Sum of Done: {itemSums.Done}");
0
ответ дан 1 November 2019 в 10:20

Другие вопросы по тегам:

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