2009-07-24 16 views
6

Sınıfının converting a class to another list soru ve cevabı güzel. MyData'nın bir listesini MyData2'nin başka bir listesine nasıl çevirebilirim? Örneğin: Lambda veya LINQ kullanarak sınıfın bir listesini başka bir sınıf listesine dönüştürün veya eşleyin.

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 = ... ? 

İşte bunu denedim ama tam kodlarını çözemiyorum:

MyData2 (dize, dize, dize) gibi bir CTOR sahiptir
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(); 

.

cevap

25

İki tür farklıysa, yeni listeye eşlemek için aynı Seçimi kullanırsınız.

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

DÜZENLEME EKLEMEK:

Şimdi sorunuzu değişti. Ne yapmaya çalıştığını düzeltmek için böyle bir şey yapabilirsin.

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

benim kodları, kısmi bir güncellendi. Bu davada PropertyList'in dikkate alması gereken null ya da değil. Orada nasıl haritalanır? –

+0

Bunu beğendim. Bu arada, kısmi kodlarımda, Birliği kullanmaya çalıştım ve Rob Elliott'u kullanarak çalıştım. Aggregate ve Union arasındaki fark nedir? –

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

Nasıl MyConversion() için inline Lambda ifadesi ayrıntı hakkında? –

+0

Senin noktasını görüyorum. MyConversion(), MyData2 sınıfında tanımlanan bir yöntemdir. –

+0

aslında, ConvertAll çalışmıyor. Ben list1.SelectMany (..) ToList() kullanın ve derleme hatası yok. Bu doğru mu? –

İlgili konular