Danh sách Linq của danh sách vào danh sách duy nhất


201

Có vẻ như đây là điều mà đã được trả lời nhưng tôi không thể tìm thấy nó.

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 lệnh để thay vì phải tạo danh sách trống và sau đó tổng hợp trong dòng tiếp theo, tôi có thể có một câu lệnh linq duy nhất đưa ra danh sách cuối cùng của mình. chi tiết là một danh sách các mục mà mỗi mục chứa một danh sách cư trú, tôi chỉ muốn tất cả các nơi cư trú 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));

Câu trả lời:


316

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

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

3
Cảm ơn. @JaredPar có lựa chọn từ yếu tố sai, nhưng cảm ơn cả hai vì sự hướng dẫn của bạn.
Jarrett Widman

51

Sử dụng Chọn nhiều

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

35

Đây là một mã mẫu cho bạn:

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

Và đặt ra sẽ là:

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

29

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ừ câu lệnh

var residences = (from d in details from a in d.AppForm_Residences select a).ToList();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.