2008-09-05 13 views
4

Ich habe eine Liste von Foo. Foo hat Eigenschaften Bar und Lum. Einige Foo s haben identische Werte für Bar. Wie kann ich lambda/linq verwenden, um meine Foo s durch Bar zu gruppieren, damit ich über Lum s jeder Gruppierung iterieren kann?Wie gruppiere ich in Speicherlisten?

Antwort

3

Deeno,

Enjoy:

var foos = new List<Foo> { 
    new Foo{Bar = 1,Lum = 1}, 
    new Foo{Bar = 1,Lum = 2}, 
    new Foo{Bar = 2,Lum = 3}, 
}; 

// Using language integrated queries: 

var q = from foo in foos 
     group foo by foo.Bar into groupedFoos 
     let lums = from fooGroup in groupedFoos 
        select fooGroup.Lum 
     select new { Bar = groupedFoos.Key, Lums = lums }; 

// Using lambdas 

var q = foos.GroupBy(x => x.Bar). 
      Select(y => new {Bar = y.Key, Lums = y.Select(z => z.Lum)}); 


foreach (var group in q) 
{ 
    Console.WriteLine("Lums for Bar#" + group.Bar); 
    foreach (var lum in group.Lums) 
    { 
     Console.WriteLine(lum); 
    } 
} 

mehr erfahren über LINQ 101 LINQ Samples lesen

4
var q = from x in list 
     group x by x.Bar into g 
     select g; 

foreach (var group in q) 
{ 
    Console.WriteLine("Group " + group.Key); 
    foreach (var item in group) 
    { 
     Console.WriteLine(item.Bar); 
    } 
} 
+0

Die 'g' Zeile in der Abfrage wählen ist eigentlich nicht notwendig; Sie können einfach 'von x in Listengruppe x mit x.Bar' schreiben. – Aaron