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

如何使用LINQ的GroupBy对相同partNo记录累加数量并拼接designator

实现方案

完全可以通过LINQ实现你需要的分组聚合逻辑,以下是可直接运行的代码:
你已有定义的Record类:

public class Record
{
    public string partNo { get; set; }
    public float quantity { get; set; }
    public string designator { get; set; }
}

假设你已经把Excel读取到的原始数据存放在List<Record> originalRecords集合中,使用LINQ方法语法实现分组聚合的代码如下:

List<Record> mergedRecords = originalRecords
    // 按partNo字段分组,相同partNo的记录会被划分到同一个分组
    .GroupBy(r => r.partNo)
    // 对每个分组进行处理,生成新的Record对象
    .Select(group => new Record
    {
        partNo = group.Key, // 分组的Key就是当前组对应的partNo值
        quantity = group.Sum(item => item.quantity), // 累加当前组所有记录的quantity值
        // 拼接当前组所有记录的designator,Trim()用于去掉原始值首尾多余的空格,避免拼接出连续空格
        designator = string.Join(" ", group.Select(item => item.designator.Trim()))
    })
    .ToList();

如果你更习惯LINQ查询语法,也可以用以下写法,效果完全一致:

List<Record> mergedRecords = (
    from record in originalRecords
    group record by record.partNo into g
    select new Record
    {
        partNo = g.Key,
        quantity = g.Sum(item => item.quantity),
        designator = string.Join(" ", g.Select(item => item.designator.Trim()))
    }
).ToList();

验证说明

用你提供的示例原始数据运行上述代码,得到的mergedRecords结果和你期望的输出完全一致:

  • partNo为123456789的记录quantity累加为5,designator拼接为C1 C2 C10 C12 C15
  • 其余没有重复partNo的记录保持原有数值不变

注意事项

如果你的业务场景中quantity是计数用的整数值,建议把Record类中的quantity类型改为int或者decimal,避免float类型累加时出现精度误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:15:03