2012-02-29 12 views
7

Başka bir nesne listesine dönüştürmek istediğim bir nesne listesi var. Ben içine ObjectOne veri listesini dönüştürebilen bir linq sorgu veya lambda ifade yazmak istiyorum buLinq veya lambda ifadesiyle nesne gruplaması

public class ObjectTwo 
{ 
    public string Name { get; set; } 
    public IEnumerable<string> Items{ get; set; } 
} 

gibi

private class ObjectOne 
    { 
     public string Name { get; set; } 
     public string Item{ get; set; } 
    } 

Ve başka:

ilk nesne şöyle ObjectTwo verilerinin listesi. ObjectTwo listesindeki her bir öğe, ObjectOne'dan ayrı bir ad içerecek ve bu isimle ilişkili tüm öğelerin numaralandırılmasını sağlayacaktır. Örneğin

"Name One", "Item One" 
"Name One", "Item Two" 
"Name Two", "Item Three" 

aşağıdaki ObjectTwo liste üretecektir ObjectOne aşağıdaki veri listesi:

var obj2List = 
    from o in list 
    group o by o.Name into g 
    select new ObjectTwo() {Name = g.Key, Items = g.Select(x => x.Item)}; 

cevap

8

:

"Name One", {"Item One", "Item Two"} 
"Name Two", {"Item Three"} 
+1

+1. Eğer "n =>" yerine "one =>" :) yerine –

+0

Şerefe, güncellenmiş kod yazmak +2 olurdu. Daha iyi görünüyor :) –

+0

@BryanHong, teşekkürler mükemmel çalışıyor! – zaq

2

Bu group by LINQ operatörü kullanılarak elde edebilirsiniz GroupBy Linq operatörünü kullanın. Daha sonra, her grup için, Anahtar'ı (gruplandırmak için kullandığınız) seçin ve her grubun öğelerini bir Listeye dönüştürün. * Değil * Sorgu anlama sözdizimi kullanılarak için

var oneList = new List<ObjectOne> 
       { 
       new ObjectOne {Name = "Name One", Item = "Item One"}, 
       new ObjectOne {Name = "Name One", Item = "Item Two"}, 
       new ObjectOne {Name = "Name Two", Item = "Item Three"} 
       }; 

var twoList= oneList.GroupBy(x => x.Name) 
        .Select (x => new ObjectTwo 
            { 
             Name = x.Key, 
             Items = x.Select(t => t.Item) 
            }); 
İlgili konular