2012-04-04 16 views
3

Wie kann ich LINQ verwenden, um Folgendes zu erreichen?Gruppieren mit mit LINQ

Ich habe einige C# Objekt (ich schreibe sie als JSON zur Vereinfachung nur)

{ Name: A, Domain: a, SubDomain: 1} 
{ Name: B, Domain: a, SubDomain: 2} 
{ Name: C, Domain: b, SubDomain: 1} 
{ Name: D, Domain: b, SubDomain: 2} 
{ Name: E, Domain: c, SubDomain: 1} 

ich sie sammeln wollen wie:

{ Domain: a ,{{Name: A, SubDomain: 1}, {Name: B, SubDomain: 2}} 
    Domain: b ,{{Name: C, SubDomain: 1}, {Name: D, SubDomain: 2}} 
    Domain: c ,{{Name: E, SubDomain: 1}} 
+5

'GroupBy (x => x.Domäne)' – gdoron

+1

Sind Sie versucht, Google? [code.msdn] (http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b) – stukselbax

Antwort

8

Sie wollen einfach nur zu einer Gruppe von Domain?

var list = GetListFromFoo(); 
var groupedList = list.GroupBy(x => x.Domain); 

Es wurde mit dieser LINQ Methode durchgeführt:

public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
    this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) 

MSDN


Wenn ich Ihren Kommentar richtig verstanden wird, ist das, was Sie suchen:

var groupedList = list.GroupBy(x => x.Domain, x => new 
             { 
              x.Name, 
              x.SubDomain 
             }); 

MSDN

+0

Zwei Dinge: a) die Elemente unter jedem Schlüssel sind immer noch vom ursprünglichen Typ, den gegenseitigen Schlüssel nicht auslassend. b) Der Schlüssel ist kein Mitglied der Sammlung, es wird nicht nach JSON Serialisierung –

+0

@EladBenda reflektiert. Bitte zeigen Sie die Klassenmitglieder und was soll der letzte Typ sein. – gdoron

+0

'{Domäne: a, {{Name: A, SubDomain: 1}, {Name: B, SubDomain: 2}} Domäne: b, {{Name: C, SubDomain: 1}, {Name: D, SubDomain : 2}} Domäne: c, {{Name: E, SubDomain: 1}} '' –

Verwandte Themen