2012-08-14 13 views
6

Nel caso ti stia chiedendo come è andata, sto lavorando con alcuni set di risultati di Entity Framework.Come unire tutti gli elementi in un oggetto IEnumerable di IEnumerables?

Ho un oggetto che è un IEnumerable<IEnumerable<string>>; in sostanza, un elenco di liste di stringhe.

Voglio unire tutti gli elenchi di stringhe in un'unica grande lista di stringhe.

Qual è il modo migliore per farlo in C# .net?

+5

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

risposta

14

Utilizzare il metodo LINQ SelectMany:

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

Per essere molto chiari su ciò che sta succedendo qui (in quanto io odio il pensiero di gente che pensa questo è una sorta di stregoneria, e mi sento male che alcune altre persone cancellato la stessa risposta):

SelectMany è un (un metodo statico extension method che attraverso zucchero sintattico si presenta come un metodo di istanza su un tipo specifico) su IEnumerable<T>. Prende la tua enumerazione originale di enumerazioni e una funzione per convertire ogni elemento di esso in un'enumerazione.

Poiché gli elementi sono già enumerazioni, la funzione di conversione viene semplice- solo restituire l'ingresso (sl => sl significa "rimessa paremeter denominato sl e restituirlo"). SelectMany fornisce quindi un'enumerazione su ciascuno di questi a sua volta, con conseguente vostra lista "appiattita" ..

+0

Grazie. Questo è quello che stavo cercando. –

2

Utilizzare il metodo Concat:

firstEnumerable.Concat(secondEnumerable) 

Utilizzando SelectMany costringerà una valutazione aggiuntiva di ogni elemento di entrambe le enumerazioni che non ti serve.

Problemi correlati