2012-08-14 31 views
6

Chỉ trong trường hợp bạn đang tự hỏi làm thế nào điều này đã đưa ra, tôi đang làm việc với một số resultsets từ Entity Framework.Làm cách nào để kết hợp tất cả các thành phần trong IEnumerable của IEnumerables?

Tôi có một đối tượng là IEnumerable<IEnumerable<string>>; về cơ bản, một danh sách các danh sách các chuỗi.

Tôi muốn hợp nhất tất cả danh sách chuỗi thành một danh sách chuỗi lớn.

Cách tốt nhất để thực hiện điều này trong C# .net là gì?

+5

['Enumerable.SelectMany'] (http://msdn.microsoft.com/en-US/library/bb534336.aspx) –

Trả lời

14

Sử dụng phương pháp LINQ SelectMany:

IEnumerable<IEnumerable<string>> myOuterList = // some IEnumerable<IEnumerable<string>>... 
IEnumerable<String> allMyStrings = myOuterList.SelectMany(sl => sl); 

Để được rất rõ ràng về những gì đang xảy ra ở đây (kể từ khi tôi ghét những suy nghĩ của mọi người nghĩ đây là một số loại phù thủy, và tôi cảm thấy xấu mà một số người khác đã xóa cùng một câu trả lời):

SelectMany là một extension method (phương pháp tĩnh thông qua đường cú pháp trông giống như một phương pháp thể hiện trên một loại cụ thể) trên IEnumerable<T>. Nó có liệt kê ban đầu của bạn liệt kê và một chức năng để chuyển đổi mỗi mục của điều đó thành một liệt kê.

Bởi vì các mục là đã enumerations, chức năng chuyển đổi được simple- chỉ trở lại đầu vào (sl => sl có nghĩa là "hãy paremeter tên sl và gửi lại"). SelectMany sau đó cung cấp một điều tra trên mỗi lần lượt, dẫn đến trong danh sách "phẳng" của bạn ..

+0

Cảm ơn. Đây là những gì tôi đang tìm kiếm. –

2

Sử dụng Concat phương pháp:

firstEnumerable.Concat(secondEnumerable) 

Sử dụng SelectMany sẽ buộc một đánh giá bổ sung của mỗi yếu tố của cả hai enumerations mà bạn không cần.

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