私には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 行の方法はありますか?
それはSelectManyと同じくらい簡単です:
シーケンスの各要素を IEnumerable に射影し、結果のシーケンスを 1 つのシーケンスにフラット化します。
var kids = people.SelectMany(p => p.Kids);
List<Kid>
( の代わりに が必要な場合は、結果IEnumerable<Kid>
を呼び出すだけ.ToList()
です。)
SelectMany拡張メソッドを使用できます
var kids = new List(people.SelectMany(person => person.Kids));
の「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();