使用lambda查找所有实体

时间:2013-01-22 20:18:12

标签: c# linq

我有List<Person>(人)每个人都有List<Kid>(孩子)

如果我想找到所有孩子,在LINQ这就是我要做的事情

var kids=new List<Kids>();

foreach(var p in people)
{
    foreach(var kid in p.Kids)
    {
         kids.Add(kid);
    }
}

使用LINQ有一种单行方式吗?

3 个答案:

答案 0 :(得分:13)

就像SelectMany一样简单:

  

将序列的每个元素投影到IEnumerable并展平   得到的序列成一个序列。

var kids = people.SelectMany(p => p.Kids);

(如果您想要List<Kid>而不是IEnumerable<Kid>,只需在结果上调用.ToList()。)

答案 1 :(得分:4)

您可以使用SelectMany扩展方法

var kids = new List(people.SelectMany(person => person.Kids));

答案 2 :(得分:3)

SelectMany的“LINQ-non-lambda-style”版本:

var allKids = 
  from p in people
  from k in p.Kids  // secondary "from" makes SelectMany (aka flat map)
  select k;

// Result from above is IEnumerable, to Force evaluation as a List:
List<Kid> allKidsList = allKids.ToList();