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

如何按Project属性对List<Data>对象分组并累加Value属性值?

简洁高效的分组累加方案(Linq实现)

嘿,你完全不用纠结复杂的嵌套循环或者手动维护Dictionary——C#的Linq就是为这种分组聚合场景量身定做的!用它来实现按Project分组并累加Value,代码简洁到离谱,而且可读性和效率都拉满。

先看核心实现代码

假设你已经有了填充好的List<Data>集合:

// 示例数据
var dataList = new List<Data>
{
    new Data { Project = "Test", Value = 1 },
    new Data { Project = "Test", Value = 5 },
    new Data { Project = "Test", Value = 25 },
    new Data { Project = "Others", Value = 89 },
    new Data { Project = "Others", Value = 151 }
};

方案1:直接获取分组后的键值对集合

这是最基础的写法,返回每个Project对应的总Value:

var projectTotals = dataList
    .GroupBy(item => item.Project) // 按Project属性分组
    .Select(group => new KeyValuePair<string, double>(
        group.Key, // 分组的键(也就是Project名称)
        group.Sum(item => item.Value) // 组内所有Value的总和
    ));

方案2:转换成Dictionary(方便快速查找)

如果之后需要通过Project名称快速查询总Value,直接转成Dictionary更实用:

var projectTotalDict = dataList
    .GroupBy(item => item.Project)
    .ToDictionary(
        group => group.Key,
        group => group.Sum(item => item.Value)
    );

// 用法示例:获取"Test"的总Value
double testTotal = projectTotalDict["Test"]; // 结果是31

方案3:返回List类型结果

如果需要保持返回结果和原数据类型一致(每个Project对应一个总Value的Data对象):

var totalDataList = dataList
    .GroupBy(item => item.Project)
    .Select(group => new Data
    {
        Project = group.Key,
        Value = group.Sum(item => item.Value)
    })
    .ToList();

为什么这个方案比你之前的尝试更好?

  • 代码简洁易读:链式调用的Linq语法几乎是“语义化”的,一眼就能看懂是在分组然后求和,完全没有嵌套循环的混乱。
  • 效率有保障:Linq的GroupBy内部已经做了优化,性能和手动维护Dictionary不相上下,但不用自己写繁琐的判断和累加逻辑,避免出错。
  • 灵活性高:可以根据需求轻松转换成键值对、Dictionary或者原数据类型的集合,适配不同的业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:22:39