我有一个包含以下类型对象的列表
public class A {
public List<B> B {get;set;}
}
B class
状态如下。
public class B {
public List <C> C { get;set;}
}
C class
状态如下。
public class C {
public int Id { get ; set ;}
public string Name { get; set;}
}
有人可以指出我如何在Name
课程中按C
属性对上面的列表进行分组。
答案 0 :(得分:2)
var results = a.SelectMany(a1 => a1.B.SelectMany(b1 => b1.C)
.GroupBy(g => g.Name)
.Select(g => new { Name = g.Key, Count = g.Count() }));
它应该返回一个对象列表,其中包含找到的每个唯一名称的Name
属性,以及一个Count
属性,指定有多少Name
被分组。
对SelectMany
的嵌套调用将展平对象层次结构,GroupBy
将在Name
属性上创建分组。最后,通过Select
返回一个新的匿名类型List,并使用该组中的属性填充,g.Key
是分组所基于的值(C.Name
)。
可以找到小提琴Here(由@chadalavada harish提供)