3

我有一个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 的方式来做到这一点?

4

3 回答 3

13

它就像SelectMany一样简单:

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

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

(如果您想要 aList<Kid>而不是IEnumerable<Kid>,只需调用.ToList()结果即可。)

于 2013-01-22T20:20:08.740 回答
4

您可以使用SelectMany扩展方法

var kids = new List(people.SelectMany(person => person.Kids));
于 2013-01-22T20:21:04.433 回答
3

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

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();
于 2013-01-22T20:23:14.813 回答