Sum List <T> List <T>中每个项目的属性

Geo*_*bes 1 .net c# linq lambda list

请参考ff.代码:

MainObj:

public class MainObj {
    public string Name { get; set; }
    public int SomeProperty { get; set; }
    public List<SubObj> Subojects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

SubObj:

public class SubObj {
    public string Description { get; set; }
    public decimal Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题:我有一个List<MainObj>.每个项目的数量相同SubObj.如何总结各自的值SubObjMainObj 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
Run Code Online (Sandbox Code Playgroud)

我知道我可以循环通过每个项目MainObj然后执行总和但我希望有一个更简单的方法使用Linq.

对不起,如果我不能为我的问题说出正确的话.我希望这些插图有所帮助.

每一个帮助都将非常感激.干杯!

Ren*_*ogt 5

据我所知,你会找到这样的问题:

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

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


你的问题并不清楚,但是如果你想要总结所有子对象(不仅有主要对象的数量),你可以这样做:

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

这会给你一个总和列表(没有名字,因为你的例子表明你"不关心"任何名字).