2009-07-24 11 views
6

La domanda e la risposta di converting a class to another list di classe sono fantastiche. Che ne dici di convertire un elenco di MyData in un altro elenco di MyData2? Ad esempio:Converti o mappa un elenco di classi in un altro elenco di classi utilizzando 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 = ... ? 

Qui provato questo ma non riesco a capire i codici completi:

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

dove mydata2 ha un CTOR come (stringa, stringa, stringa).

risposta

25

Se i due tipi sono diversi, si utilizzerà lo stesso Seleziona per eseguire il mapping al nuovo elenco.

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

Modifica per aggiungere:

Ora che hai cambiato la tua domanda. Puoi fare qualcosa di simile per aggiustare ciò che stai cercando di fare.

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

Ho aggiornato i miei codici, uno parziale. Questo caso, devo prendere in considerazione l'oggetto PropertyList è nullo o no. Come mappare lì? –

+0

Mi piace questo. A proposito, nei miei codici parziali, ho provato ad usare Union e ho funzionato usando Rob Elliott. Qual è la differenza tra Aggregate e Union? –

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

come su dettagli espressione Lambda in linea per MyConversion()? –

+0

Vedo il tuo punto. MyConversion() è un metodo definito nella classe MyData2. –

+0

in realtà, ConvertAll non funziona. Io uso list1.SelectMany (..). ToList() e nessun errore di compilazione. È giusto? –

Problemi correlati