【问题标题】:C# group by list then SUMC# 按列表分组然后 SUM
【发布时间】:2018-11-23 11:06:29
【问题描述】:

如何分组然后在列表中求和 以下是我的示例代码:

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}

如何将 amoutcount 相加,然后按类别分组? 我希望结果是

数量 = 200,类别 = “鱼”,计数 = 100

数量 = 100,类别 = “猪肉”计数 = 50

【问题讨论】:

  • stackoverflow.com/a/4351889/3583859 这个链接可能有帮助
  • 问题的主要原因是 GroupBy 调用中的 x => new { x.Category }。它应该只是 GroupBy(x => x.Category)

标签: c# list linq


【解决方案1】:

以下代码 sn-p 将为您工作:

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)
});

事实证明,您的代码也可以正常工作,可能问题是您希望 list 被就地修改,但 linq 不会产生副作用,并且会创建新的 IEnumerable,您需要将结果保存到变量中。

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多