使用Lambda表达式在列表中使用内部属性进行分组

时间:2017-07-11 17:19:20

标签: c# linq lambda

我有一个包含以下类型对象的列表

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属性对上面的列表进行分组。

1 个答案:

答案 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提供)