リストから単一リストへのLinqリスト


201

これはすでに答えられているようなもののようですが、私はそれを見つけることができません。

私の質問は非常に単純です。これを1つのステートメントで実行して、空のリストを新規作成して次の行に集約する代わりに、最終リストを出力する単一のlinqステートメントを作成する方法を教えてください。詳細は、それぞれが住居のリストを含むアイテムのリストです。私は、すべての住居をフラットリストにしたいだけです。

var residences = new List<DAL.AppForm_Residences>();
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d));

回答:


316

SelectMany拡張メソッドを使用したい。

var residences = details.SelectMany(d => d.AppForm_Residences).ToList();

3
ありがとう。@JaredParには間違った要素からの選択がありますが、両方のガイダンスをありがとうございます。
Jarrett Widman、

51

SelectManyを使用する

var all = residences.SelectMany(x => x.AppForm_Residences);

35

これはあなたのためのサンプルコードです:

List<int> listA = new List<int> { 1, 2, 3, 4, 5, 6 };

List<int> listB = new List<int> { 11, 12, 13, 14, 15, 16 };

List<List<int>> listOfLists = new List<List<int>> { listA, listB };

List<int> flattenedList = listOfLists.SelectMany(d => d).ToList();

foreach (int item in flattenedList)
{
    Console.WriteLine(item);
}

そして出力は次のようになります:

1
2
3
4
5
6
11
12
13
14
15
16
Press any key to continue . . .

29

クエリ式の構文が必要な場合:2つのfromステートメントを使用します

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.