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

Jawaban:


316

Anda ingin menggunakan SelectManymetode ekstensi.

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

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

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 . . .

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();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.