Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Пример группировки данных в LINQ

#c_sharp #linq


Нужно в массиве данных получить суммарное значение по полю разделенных по группам.

Пример:

IEnumerable
Member Issue.Member
decimal Issue.hours


Нужно пройти по массиву Issue, сгруппировать данные по member и для каждой группы
сосчитать суммарное значение hours

Пытался следующим образом:

issues
.Where(w => w.Member != null)
.Group(g => g.Member)
.Select(s => {
 s.Key
 // Здесь могу получить только ключ, а как получить данные и дальше их начать суммировать?
});


По окончанию выборка должна содержать пару значений .
    


Ответы

Ответ 1



Группировка поддерживает итерирование по ней, поэтому можно просто вызвать метод Sum(): var data = issues .Where(m => m != null) .Group(g => g.Member) .Select(s => new { s.Key, Sum = s.Sum(i => i.hours) }); // или .Select(s => Tuple.Create(s.Key, s.Sum(i => i.hours))); data будет содержать список объектов с ключом группировки и значением суммы для каждой группировки.

Ответ 2



Или так: var data = from issue in issues group issue by issue.Member into g select new {g.Key, Sum = g.Sum(s => s.hours)};

Комментариев нет:

Отправить комментарий