C # группировать по списку, затем СУММА - PullRequest
0 голосов
/ 23 ноября 2018

Как сгруппировать по сумме в списке ниже мой пример кода:

List<BrandType> brandTypeList = new List<BrandType>();

BrandType brandTypeClass = new BrandType();
brandTypeClass.Amount = 100;
brandTypeClass.Count = 50;
brandTypeClass.Category = "Fish";
brandTypeList.Add(brandTypeClass);

BrandType brandTypeClass2 = new BrandType();
brandTypeClass2.Amount = 100;
brandTypeClass2.Count = 50;
brandTypeClass2.Category = "Fish";
brandTypeList.Add(brandTypeClass2);

BrandType brandTypeClass3 = new BrandType();
brandTypeClass3.Amount = 100;
brandTypeClass3.Count = 50;
brandTypeClass3.Category = "Pork";
brandTypeList.Add(brandTypeClass3);
    brandTypeList.GroupBy(x => new { x.Category }).Select
(x => new { Category = x.Key.Category, 
Amount = x.Sum(z => z.Amount), 
Count = x.Sum(z => z.Count) });

Вот как это выглядит

[0] {Amount = 100, Category = "Pork", Count = 50}
[1] {Amount = 100, Category = "Fish", Count = 50}
[2] {Amount = 100, Category = "Fish", Count = 50}

Как мне суммировать сумму и count затем группировать по категориям?Я хочу, чтобы результат был

Количество = 200, Категория = "Рыба", Количество = 100

Количество = 100, Категория = "Свинина" Количество = 50

1 Ответ

0 голосов
/ 23 ноября 2018

Следующий фрагмент кода будет работать для вас:

var result = from brand in brandTypeList
            group brand by brand.Category into grp
            select new
            {
                Category = grp.Key,
                Amount = grp.Sum(z => z.Amount),
                Count = grp.Sum(z => z.Count)
            };

Этот также отлично работает:

var result = brandTypeList.GroupBy(x => x.Category).Select
(y => new {
    Category = y.Key,
    Amount = y.Sum(z => z.Amount),
    Count = y.Sum(z => z.Count)
});

Оказывается, ваш код также работает нормально, возможно, проблема ввы ожидаете, что список будет изменен на месте, но linq не вызывает побочных эффектов, и будет создан новый IEnumerable, и вам нужно сохранить результаты в переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...