2012-08-14 24 views
6

爲了防止你想知道這是怎麼產生的,我正在使用Entity Framework中的一些結果集。如何將IEnumerable的IEnumerables中的所有元素連接在一起?

我有一個對象是IEnumerable<IEnumerable<string>>;基本上是一串字符串列表。

我想將所有的字符串列表合併成一個大的字符串列表。

在C#.net中執行此操作的最佳方法是什麼?

+5

['Enumerable.SelectMany'](http://msdn.microsoft.com/en-US/library/bb534336.aspx) – 2012-08-14 18:04:57

回答

14

使用LINQ的SelectMany方法:

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

約爲怎麼在這裏上很清楚(因爲我最討厭的人以爲這是某種巫術的思想,我覺得不好,其他一些人刪除相同的答案):

SelectMany是通過語法糖看起來像IEnumerable<T>上的特定類型的實例方法)的extension method(靜態方法。它將枚舉的原始枚舉和函數轉換爲枚舉的每一項。

因爲項目是已經枚舉,轉換函數是簡單 - 只是返回輸入(sl => sl的意思是「取了一個名爲sl paremeter並返回」)。隨後的SelectMany提供一個枚舉在每個這些反過來又導致你的「扁平化」名單..

+0

謝謝。這是我正在尋找的。 – 2012-08-14 19:05:20

2

使用Concat方法:

firstEnumerable.Concat(secondEnumerable) 

使用SelectMany將迫使這兩個枚舉中的每個元素的額外評估你不需要。

相關問題