2009-07-17 43 views
137

Có vẻ như đây là loại điều đã được trả lời nhưng tôi không thể tìm thấy nó.Danh sách các danh sách LINQ trong một danh sách duy nhất

Câu hỏi của tôi khá đơn giản, làm thế nào tôi có thể làm điều này trong một câu sao cho thay vì phải tạo danh sách trống mới rồi tổng hợp trong dòng tiếp theo, tôi có thể có một câu lệnh linq xuất ra danh sách cuối cùng. chi tiết là một danh sách các mục mà mỗi người có chứa một danh sách nhà ở, tôi chỉ muốn tất cả các nhà ở trong một danh sách phẳng.

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

Có thể trùng lặp của [Làm cách nào để hợp nhất danh sách các danh sách có cùng một loại mục vào một danh sách các mục?] (Http://stackoverflow.com/questions/1191054/how-to-merge-a-list-of- list-with-same-type-of-items-to-một-danh sách-of-items) – Dzyann

Trả lời

202

Bạn muốn sử dụng phương pháp SelectMany mở rộng.

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

Cảm ơn. @JaredPar có lựa chọn từ phần tử sai, nhưng cảm ơn cả hai vì sự hướng dẫn của bạn. –

39

Sử dụng SelectMany

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

Và đối với những người muốn cú pháp biểu thức truy vấn: bạn sử dụng hai từ báo cáo

var residences = (from d in details from a in d.AppForm_Residences select a).ToList(); 
23

Có một mẫu mã cho bạn:

List<List<int>> l = new List<List<int>>(); 

    List<int> a = new List<int>(); 
    a.Add(1); 
    a.Add(2); 
    a.Add(3); 
    a.Add(4); 
    a.Add(5); 
    a.Add(6); 
    List<int> b = new List<int>(); 
    b.Add(11); 
    b.Add(12); 
    b.Add(13); 
    b.Add(14); 
    b.Add(15); 
    b.Add(16); 

    l.Add(a); 
    l.Add(b); 

    var r = l.SelectMany(d => d).ToList(); 
    foreach(int i in r) 
    { 
     Console.WriteLine(i); 
    } 

Và đặt ra sẽ là:

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

Điều này đã giúp tôi hiểu và áp dụng cho dữ liệu của mình. Kêu la. – sobelito

+0

cảm ơn giải thích hoàn hảo và hiển thị đầu ra – Ali7091

Các vấn đề liên quan