2013-04-03 14 views
5

Biorąc pod uwagę następującą listę:LINQ GroupBy i agregatów

var data = new[] 
    { 
     new {category = "Product", text = "aaaa"}, 
     new {category = "Product", text = "bbbb"}, 
     new {category = "Product", text = "bbbb"}, 
    }; 

jak mam to grupa według kategorii i zwraca obiekt z kategorii oraz opis poszczególnych tekście umieścić razem ??

tj. chciałby zakończyć yp z:

{ 
    categroy="Product" 
    description = "aaaa,bbbb,cccc" 
} 

próbowałem następujące GroupBy i kruszywa, ale coś jest nie tak

data.GroupBy(x => x.category).Select(g => new 
    { 
     category = g.Key, 
     description = g.Aggregate((s1, s2) => s1 + "," + s2) 
    }); 

TIA

Odpowiedz

7

Dlaczego nie używasz String.Join(IEnumerable) metody?

data.GroupBy(x => x.category).Select(g => new 
{ 
    category = g.Key, 
    description = String.Join(",", g.Select(x => x.text)) 
}); 

Z Aggregate należy zrobić co następuje:

description = g.Aggregate(string.Empty, (x, i) => x + "," + i.text) 

Pierwszy parametr określa wartość początkową zalążkowy String.Empty. Drugi parametr określa metodę konkatenacji bieżącej wartości początkowej (string) z bieżącym elementem (anonymous_type).