c# - Sum List<T> List<T> 中每一项的属性

标签 c# .net linq list lambda

请引用ff。代码:

主要对象:

public class MainObj {
    public string Name { get; set; }
    public int SomeProperty { get; set; }
    public List<SubObj> Subojects { get; set; }
}

子对象:

public class SubObj {
    public string Description { get; set; }
    public decimal Value { get; set; }
}

问题:我有一个 List<MainObj> .每个项目都有相同数量的 SubObj .如何对每个 SubObj 的值求和来自 MainObj A对应于与 SubObj 相同的索引在另一个MainObj在列表中。

进一步说明:

结果:

{
    Name: "something....",
    Value: SUM(MainObj_A.SubObj[0], MainObj_B.SubObj[0] .... MainObj_n.SubObj[0]
},
{
    Name: "don't really care...."
    Value: SUM(MainObj_A.SubObj[1], MainObj_B.SubObj[1] .... MainObj_n.SubObj[1]
},
{
    Name: "don't really care...."
    Value: SUM(MainObj_A.SubObj[2], MainObj_B.SubObj[2] .... MainObj_n.SubObj[2]
}
.... so on and so forth

我知道我可以遍历 MainObj 中的每一项然后执行求和,但我希望有一种更简单的方法使用 Linq .

很抱歉,如果我不能用正确的词来回答我的问题。我希望这些插图对您有所帮助。

我们将不胜感激。 干杯!

最佳答案

据我了解,您正在寻找类似这样的问题:

var results = list.Select((m, i) => new 
          {
             m.Name, 
             Value = list.Sum(t => t.SubObj[i].Value)
          }).ToList();

这将创建一个匿名类型的列表,其中包含每个主对象的名称以及与主对象具有相同索引的所有子对象值的总和。


从你的问题中不清楚,但如果你想对所有子对象求和(不仅有主对象那么多),你可以这样做:

var results = Enumerable.Range(0, list[0].SubObj.Count)
                        .Select(i => list.Sum(m => m.SubObj[i].Value)).ToList();

这为您提供了总和列表(没有名称,因为您的示例表明您“并不真正关心”任何名称)。

关于c# - Sum List<T> List<T> 中每一项的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714919/

相关文章:

c# - 使用 webAPI Bearer Token 的 SignalR 身份验证

c# - 将 Access 数据库表加载到数据表

C# 编码(marshal)处理 - 获取 C char** 的内容并转换为 byte[]

.net - 如何等待远程 .NET 调试器连接

mysql - 在 ASP.NET 中使用一个应用程序连接两个不同的数据库

.net - PowerShell:一种创建闭包的优雅方式

从 viewModel 和 List<> 进行 LINQ 过滤

c# - 如何在单元测试中比较列表

html - 我如何解决 System.Collections.Generic.List 没有 ProductID 的定义或 ProductID 的方法?

c# - 如何使用 linq 连接 2 个表但避免匿名对象