使用linq对嵌套列表进行分组

我有一个嵌套的对象列表。 我需要通过identifierASum对其数字属性进行分组,嵌套列表应分别分组:

 public class TypeA { public String identifierA{ get; set; } public Int32 number { get; set; } public List nestedList { get; set; } } public class TypeB { public String identifierB { get; set; } public Int32 otherNumber { get; set; } } 

所以我期待这样的事情:

 var List groupedList = (from a in TypeAList group a by a.identifierA into groupedData select new TypeA { identifierA = groupedData.Key, number = groupedData.Sum(g => g.number ), nestedList = //HOW TO GROUP NESTED PART? }).ToList(); 

我认为这将解决您的问题。

 List list = TypeAList .GroupBy(a => a.identifierA) .Select( g => new TypeA { identifierA = g.Key, number = g.Sum(n => n.number), nestedList = g.SelectMany(l => l.nestedList) .GroupBy(b => b.identifierB) .Select( gg => new TypeB { identifierB = gg.Key, otherNumber = gg.Sum(b => b.otherNumber) }).ToList() }).ToList(); 

SelectMany采用IEnumerable并将所有SomethingWithAnIEnumerable的选定IEnumerable s展平为单个IEnumerable

 nestedList = groupedData.SelectMany(pa => pa.nestedList).ToList() 

使用SelectMany

如果要将列表分组为一个用途

 nestedList = groupedData.SelectMany(d=>d.nestedList) 

如果你想要该列表的Sum ,请使用

 nestedList = groupedData.SelectMany(d=>d.nestedList).Sum(o=>o.otherNumber) 

我认为你的IdentfierB可能是某种键,你的结果应该反映Grouped和Summed TypeBs。

 List groupedList = TypeAList .GroupBy(a => a.identifierA) .Select(g => new TypeA() { identierA = g.Key, number = g.Sum(a => a.number) nestedList = g.SelectMany(a => a.nestedList) .GroupBy(b => b.identifierB) .Select(g2 => new TypeB() { identifierB = g2.Key, otherNumber = g2.Sum(b => b.otherNumber) } }