c# - C# 按列表分组然后 SUM
问题描述
如何在下面的列表中进行分组是我的示例代码:
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}
我怎样才能将金额和计数相加,然后按类别分组?我希望结果是
数量 = 200,类别 =“鱼”,计数 = 100
数量 = 100,类别 =“猪肉”计数 = 50
解决方案
以下代码段将为您工作:
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 并且您需要将结果保存到变量中。
推荐阅读
- logstash - 如何以这种方式配置logstash?
- mysql - 如果不在列表中,SQL 查询返回零
- c++ - 我必须删除指向 FLTK 中小部件的指针吗?
- node.js - 如何更有效地在可视化代码中调试 Nodejs 6.x
- java - 你可以重写子类中的超类方法什么都不做吗?
- javascript - 获取回复消息的原始内容。[discord.js]
- php - errno: 150 "迁移时外键约束形成错误
- java - 为什么使用 ComplexPhraseQueryParser 的 Lucene 搜索会为某些内容而不是所有内容抛出异常?
- azure - Defender 365 REST API(您没有任何必需的应用程序权限(Incident.ReadWrite.All、Incident.Read.All)来访问资源)
- javascript - 正确清理请求的数据 - Typescript、React