如何合并GroupBy分组列表并对非键字段am求和(无需字典/KeyValuePair)
当然可以呀!完全不用依赖Dictionary或者KeyValuePair,靠LINQ自带的GroupBy加Select就能轻松实现你的需求。
给你看具体的实现代码:
// 你的原始列表 List<Cl> list = new List<Cl>() { new Cl() { vi = 1, vs = "q", am = 20 }, new Cl() { vi = 1, vs = "w", am = 30 }, new Cl() { vi = 2, vs = "w", am = 40 }, new Cl() { vi = 1, vs = "q", am = 50 } }; // 分组后合并,返回原Cl类型的列表 var mergedList = list.GroupBy(item => new { item.vi, item.vs }) .Select(group => new Cl { vi = group.Key.vi, vs = group.Key.vs, am = group.Sum(item => item.am) }) .ToList();
如果你不需要返回原来的Cl类型,也可以用匿名类型封装结果,更贴合你想要的键值展示形式:
var mergedResult = list.GroupBy(item => new { item.vi, item.vs }) .Select(group => new { Key = group.Key, TotalAm = group.Sum(item => item.am) }) .ToList();
简单说下原理:
- 先用
GroupBy把拥有相同vi和vs的元素归为一组,分组的Key是包含这两个字段的匿名类型 - 再通过
Select遍历每个分组,计算组内am的总和,最后把Key里的vi、vs和求和后的结果封装成你需要的对象(原类型或匿名类型都可以)
这样得到的结果完全符合你的要求,而且全程没用到Dictionary或KeyValuePair哦。
内容的提问来源于stack exchange,提问作者dievee
相关产品推荐
相关产品推荐

