П
Профессор Си
@csharpovich3.0K подп.
1.1Kпросмотров
37.6%от подписчиков
23 января 2026 г.
Score: 1.2K
📎 Когда хочется коротко, но выходит долго GroupBy в LINQ удобный и выразительный, поэтому его часто тянут в любой код, где надо что то посчитать по ключу. Проблема в том, что GroupBy решает задачу группировки, а агрегация это частный случай, и за него иногда приходится платить лишним. Типичный паттерн выглядит так: var totals = orders .GroupBy(o => o.CustomerId) .Select(g => new { CustomerId = g.Key, Total = g.Sum(o => o.Amount) }) .ToList(); Выглядит читабельно, но GroupBy внутри строит структуру групп, а значит элементы буферизуются и создаются объекты группировок, даже если в итоге нужен только итоговый Total. Если нужна именно аккумуляция, проще и дешевле сделать один проход и складывать суммы в словарь: var totals = new Dictionary<int, decimal>(); foreach (var order in orders) { if (totals.TryGetValue(order.CustomerId, out var current)) totals[order.CustomerId] = current + order.Amount; else totals[order.CustomerId] = order.Amount; } Это скучно, зато алгоритм читается буквально, один проход, явные обновления, без сюрпризов с материализацией групп. Профессор Си
1.1K
просмотров
1148
символов
Нет
эмодзи
Нет
медиа

Другие посты @csharpovich

Все посты канала →
📎 Когда хочется коротко, но выходит долго GroupBy в LINQ уд — @csharpovich | PostSniper