2009-07-24 30 views
6

La pregunta y respuesta de converting a class to another list de la clase es genial. ¿Qué tal si convertimos una lista de MyData en otra lista de MyData2? Por ejemplo:¿Convertir o asignar una lista de clase a otra lista de clase utilizando Lambda o LINQ?

List<MyData> list1 = new List<MyData>(); 
// somewhere list1 is populated 
List<MyData2> list2; 
// Now I need list2 from list1. How to use similar LINQ or Lambda to get 
list2 = ... ? 

Aquí he intentado esto, pero no puedo averiguar los códigos completos:

list2 = (from x in list1 where list1.PropertyList == null 
    select new MyData2(null, x.PropertyB, x.PropertyC). 
    Union (
     from y in list1 where list.PropertyList != null 
     select new MyData2(/* ? how to loop each item in ProperyList */ 
       y.PropertyB, y.PropertyC) 
    ).ToList(); 

donde mydata2 tiene una CTOR como (cadena, cadena, cadena).

Respuesta

25

Si los dos tipos son diferentes, usaría el mismo Seleccionar para asignar a la nueva lista.

list2 = list1.Select(x => new MyData2() 
            { 
            //do your variable mapping here 
            PropertyB = x.PropertyB, 
            PropertyC = x.PropertyC 
            }).ToList(); 

Editar para agregar:

Ahora que ha cambiado su pregunta. Puedes hacer algo como esto para arreglar lo que estás tratando de hacer.

list2 = list1.Aggregate(new List<MyData2>(), 
       (x, y) => 
       { 
        if (y.PropertyList == null) 
        x.Add(new MyData2(null, y.PropertyB, y.PropertyC)); 
        else 
        x.AddRange(y.PropertyList.Select(z => new MyData2(z, y.PropertyB, y.PropertyC))); 

         return x; 
       } 
      ); 
+0

he actualizado mis códigos, uno parcial. En este caso, tengo que considerar PropertyList como nulo o no. Cómo mapear allí? –

+0

Me gusta esto. Por cierto, en mis códigos parciales, traté de usar Union y lo conseguí trabajando usando Rob Elliott. ¿Cuál es la diferencia entre Aggregate y Union? –

3
list2 = list1.ConvertAll<MyData>(a => a.MyConversion()) 
+0

¿qué tal detalles en línea Lambda expresión para MyConversion()? –

+0

Veo tu punto. MyConversion() es un método definido en la clase MyData2. –

+0

en realidad, ConvertAll no está funcionando. Uso list1.SelectMany (..). ToList() y no hay error de compilación. ¿Está bien? –

Cuestiones relacionadas