2009-07-17 23 views
137

Sembra che questo sia il tipo di cosa a cui sarebbe già stata data risposta ma non riesco a trovarla.Linq lista di liste a lista singola

La mia domanda è piuttosto semplice, come posso farlo in una dichiarazione in modo che invece di dover creare una nuova lista vuota e quindi aggregarla nella riga successiva, posso avere una singola istruzione linq che emette la mia lista finale. dettagli è un elenco di elementi che contengono ciascuno un elenco di residenze, voglio solo tutte le residenze in un elenco semplice.

var residences = new List<DAL.AppForm_Residences>(); 
details.Select(d => d.AppForm_Residences).ToList().ForEach(d => residences.AddRange(d)); 
+1

Possibile duplicato di [Come unire un elenco di elenchi con lo stesso tipo di elementi a un singolo elenco di elementi?] (Http://stackoverflow.com/questions/1191054/how-to-merge-a-list-of- liste-con-stesso-tipo-di-articoli-a-un-elenco-unico-di-articoli) – Dzyann

risposta

202

Si desidera utilizzare il metodo SelectMany estensione.

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

Grazie. @JaredPar ha la selezione dall'elemento sbagliato, ma grazie a entrambi per la tua guida. –

39

Usa SelectMany

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

E per coloro che vogliono la sintassi delle espressioni di query: si utilizzano due da dichiarazioni

var residences = (from d in details from a in d.AppForm_Residences select a).ToList(); 
23

V'è un codice di esempio per voi:

List<List<int>> l = new List<List<int>>(); 

    List<int> a = new List<int>(); 
    a.Add(1); 
    a.Add(2); 
    a.Add(3); 
    a.Add(4); 
    a.Add(5); 
    a.Add(6); 
    List<int> b = new List<int>(); 
    b.Add(11); 
    b.Add(12); 
    b.Add(13); 
    b.Add(14); 
    b.Add(15); 
    b.Add(16); 

    l.Add(a); 
    l.Add(b); 

    var r = l.SelectMany(d => d).ToList(); 
    foreach(int i in r) 
    { 
     Console.WriteLine(i); 
    } 

E l'out put sarà:

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

Questo mi ha aiutato a capire e applicare ai miei dati. Grido. – sobelito

+0

grazie per la perfetta spiegazione e visualizzazione dell'output – Ali7091