2009-07-17 23 views
137

Parece que este es el tipo de cosa que ya habría sido respondida pero no puedo encontrarla.lista de listas de Linq para una sola lista

Mi pregunta es bastante simple, ¿cómo puedo hacer esto en una declaración para que en lugar de tener que actualizar la lista vacía y agregar en la siguiente línea, pueda tener una única instrucción linq que emita mi lista final. detalles es una lista de elementos que contienen una lista de residencias, solo quiero que todas las residencias estén en una lista plana.

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

Posible duplicado de [¿Cómo combinar una lista de listas con el mismo tipo de elementos en una sola lista de elementos?] (Http://stackoverflow.com/questions/1191054/how-to-merge-a-list-of- lists-with-same-type-of-items-to-a-single-list-of-items) – Dzyann

Respuesta

202

Usted desea utilizar el método SelectMany extensión.

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

Gracias. @JaredPar tiene la selección del elemento equivocado, pero gracias a ambos por su orientación. –

39

Uso SelectMany

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

Y para aquellos que quieren la sintaxis de expresión de consulta: utiliza dos de declaraciones

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

No es un ejemplo de código para usted:

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); 
    } 

Y el cabo puesto será:

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

Esto me ayudó a entender y aplicar a mis datos. Gritar. – sobelito

+0

gracias por explicar y mostrar la salida – Ali7091