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 を使用してこれを行う 1 行の方法はありますか?

4

3 に答える 3

13

それはSelectManyと同じくらい簡単です:

シーケンスの各要素を IEnumerable に射影し、結果のシーケンスを 1 つのシーケンスにフラット化します。

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

List<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 非ラムダ スタイル」バージョン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 に答える