Linq / C #: Выбор и суммирование элементов из результата группы по? - PullRequest
1 голос
/ 07 июня 2010

У меня есть такой список:

City   Total
Sydney 11
Dublin 9
London 12
Dublin 3
London 9
Sydney 12
Прежде всего мне нужно сгруппировать по городам и суммам, поэтому у меня есть
Sydney 23
Dublin 12
London 21

Далее мне нужно отфильтровать те записи, где общее количество> 20

Sydney 23
London 21

И, наконец, мне нужно общее количество этих записей, например, 44

Я действительно хочу сделать это в 1 единственном операторе LINQ, возможно?

Thx,

Ответы [ 2 ]

9 голосов
/ 07 июня 2010
int cityTotals = cities
    .GroupBy(c => c.City)
    .Select(grp => new { City = grp.Key, Total = grp.Sum(c => c.Total) })
    .Where(c => c.Total > 20)
    .Sum(c => c.Total);
6 голосов
/ 07 июня 2010

Пара альтернативных подходов к Ли:

int cityTotals = cities
    .GroupBy(c => c.City)
    .Select(grp => grp.Sum(c => c.Total))
    .Where(total => total > 20)
    .Sum();

или

int cityTotals = cities
    .GroupBy(c => c.City, (key, grp) => grp.Sum(x => x.Total))
    .Where(total => total > 20)
    .Sum();
...