Linq daftar daftar menjadi daftar tunggal

201

Sepertinya ini adalah hal yang sudah dijawab tapi aku tidak bisa menemukannya.

Pertanyaan saya cukup sederhana, bagaimana saya bisa melakukan ini dalam satu pernyataan sehingga daripada harus baru daftar kosong dan kemudian agregat di baris berikutnya, bahwa saya dapat memiliki pernyataan linq tunggal yang menampilkan daftar akhir saya. Rinciannya adalah daftar item yang masing-masing berisi daftar tempat tinggal, saya hanya ingin semua tempat tinggal dalam daftar datar.

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

Jawaban:

316

Anda ingin menggunakan SelectManymetode ekstensi.

var residences = details.SelectMany(d => d.AppForm_Residences).ToList();
Noldorin
sumber
3
Terima kasih. @JaredPar memiliki pilihan dari elemen yang salah, tetapi terima kasih atas bimbingan Anda.
Jarrett Widman
51

Gunakan SelectMany

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

Berikut ini contoh kode untuk Anda:

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);
}

Dan hasilnya adalah:

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

Dan bagi mereka yang menginginkan sintaks ekspresi kueri: Anda menggunakan dua dari pernyataan

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();
Sean B
sumber