You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中合并列表重复对象:按指定列求和Amount的Value值

C# 合并相同Column1/Column2记录并累加Amount.Value的实现方案

核心思路

用LINQ的GroupBy方法按Column1和Column2分组,对每组内的Amount.Value进行求和聚合,而非单纯去重。

步骤实现

  1. 定义对应实体类
    先匹配数据结构创建实体类:

    public class AmountItem
    {
        public decimal Value { get; set; }
    }
    
    public class Record
    {
        public List<AmountItem> Amount { get; set; }
        public string Column1 { get; set; }
        public string Column2 { get; set; }
    }
    
  2. 编写合并逻辑
    通过GroupBy分组后,对每组的数值进行聚合:

    // 示例原始数据
    var originalList = new List<Record>
    {
        new Record
        {
            Amount = new List<AmountItem> { new AmountItem { Value = 10 } },
            Column1 = "Objective 1",
            Column2 = "6789"
        },
        new Record
        {
            Amount = new List<AmountItem> { new AmountItem { Value = 10 } },
            Column1 = "Objective 1",
            Column2 = "6789"
        }
    };
    
    // 合并逻辑
    var mergedList = originalList
        // 按Column1和Column2的组合值分组
        .GroupBy(record => new { record.Column1, record.Column2 })
        .Select(group => new Record
        {
            Column1 = group.Key.Column1,
            Column2 = group.Key.Column2,
            // 累加分组内所有记录的Amount.Value总和
            Amount = new List<AmountItem> 
            { 
                new AmountItem { Value = group.Sum(r => r.Amount.Sum(a => a.Value)) } 
            }
        })
        .ToList();
    

关键说明

  • GroupBy使用匿名类型作为分组键,确保只有Column1和Column2完全相同时才会被分到同一组。
  • 内层r.Amount.Sum(a => a.Value)处理单条记录中Amount列表的多值求和,外层group.Sum(...)处理分组内所有记录的总和。
  • 此方案无需额外判断列表长度,1条记录时分组后仍返回原记录,2条及以上时自动合并聚合。

为什么Distinct()不适用

Distinct()的核心是去重:默认按对象引用比较(类类型),即使重写Equals和GetHashCode实现值比较,也只能保留唯一记录,无法对Amount.Value进行累加操作,完全不满足聚合需求。

内容的提问来源于stack exchange,提问作者Karthikeyan Sivakumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:55:19