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

如何以LINQ友好的更优方式计算多层嵌套对象中孙层级的数值总和?

如何以LINQ友好的更优方式计算多层嵌套对象中孙层级的数值总和?

嘿,看起来你已经在处理多层嵌套对象的求和需求了,我来给你分享几个更简洁、更符合LINQ风格的写法~

首先先补全一下你的类定义(假设你要求和的是Object3里的某个数值属性,比如Value):

public class Object1 
{    
    // 其他属性...
    public IEnumerable<Object2> Object2s { get; set; } = []; 
}  

public class Object2 
{    
    // 其他属性...
    public IEnumerable<Object3> Object3s { get; set; } = []; 
}

public class Object3
{
    // 假设你要求和的是这个数值属性
    public int Value { get; set; }
}

单Object1实例的求和

如果你只需要对单个Object1实例里所有Object3的Value求和,用SelectMany把嵌套的集合扁平化,再直接Sum就搞定了:

int total = object1.Object2s
    .SelectMany(o2 => o2.Object3s) // 把所有Object2里的Object3合并成一个集合
    .Sum(o3 => o3.Value); // 对合并后的集合里的Value求和

多个Object1实例的求和

如果是处理Object1的集合,那就多一层SelectMany即可:

int total = object1List
    .SelectMany(o1 => o1.Object2s) // 先把所有Object1里的Object2合并
    .SelectMany(o2 => o2.Object3s) // 再合并所有Object2里的Object3
    .Sum(o3 => o3.Value);

处理可能为null的集合

要是你的集合有可能是null(比如没初始化),可以用空传播运算符避免空引用异常:

int total = object1.Object2s?
    .SelectMany(o2 => o2.Object3s)?
    .Sum(o3 => o3.Value) ?? 0;

对比传统的嵌套foreach写法,这种LINQ链式调用不仅代码更简洁,可读性也更强——一眼就能看出来是把多层集合扁平化后求和,逻辑非常清晰。哪怕以后层级再多,继续加SelectMany就行,扩展性也很好。

备注:内容来源于stack exchange,提问作者CrystalBlue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:23:06