2012-08-14 19 views
6

En caso de que se pregunte cómo surgió esto, estoy trabajando con algunos resultados de Entity Framework.¿Cómo juntar todos los elementos en un IEnumerable de IEnumerables?

Tengo un objeto que es un IEnumerable<IEnumerable<string>>; básicamente, una lista de listas de cadenas.

Quiero fusionar todas las listas de cadenas en una gran lista de cadenas.

¿Cuál es la mejor manera de hacer esto en C# .net?

+5

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

Respuesta

14

Utilice el método de LINQ SelectMany:

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

ser muy claro acerca de lo que está pasando aquí (ya que me gusta la idea de que la gente pensando que esto es una especie de hechicería, y me siento mal de que algunas otras personas suprimido la misma respuesta):

SelectMany es una (un método estático extension method que a través de azúcar sintáctico se ve como un método de instancia en un tipo específico) en IEnumerable<T>. Toma su enumeración original de enumeraciones y una función para convertir cada elemento de eso en una enumeración.

Debido a que los artículos son ya enumeraciones, la función de conversión es simple: sólo devuelve la entrada (sl => sl significa "tomar un Paremeter llamado sl y devolverlo"). SelectMany a continuación, proporciona una enumeración sobre cada uno de estos a su vez, resulta en su lista de "aplanado" ..

+0

Gracias. Esto es lo que estaba buscando. –

2

uso del método Concat:

firstEnumerable.Concat(secondEnumerable) 

Usando SelectMany obligará a una evaluación adicional de cada elemento de ambas enumeraciones que no necesitas

Cuestiones relacionadas