2012-04-01 5 views
0

Die Linq-Auflistung besteht aus einem SearchResult-Objekt.Verwenden einer Gruppe von in Linq, um aggregierte Datensätze auszuwählen

Search enthält: id (Anzahl), category (string)

Ich möchte in eine neue Kollektion auswählen, um alle mit Linq die aggregierten Kategorien (dh, wenn mindestens ein Suchergebnis mit einer Kategorie ist A schließe dann Kategorie A in die Sammlung ein.

Wenn möglich, die Ergebnisse alphabetisch sortieren.

Beispiel:

Suchergebnisse:

1, Computer

2, IT

3, Finanzen

4, Finanzen

5, Nachrichten

6, Wetter

7, IT

8, Mode

Die resultierende Sammlung: (Computer, Mode, Finanzen, IT, Nachrichten, Wetter).

Hier ist, was ich bisher habe:

SearchResultsCollection ist IEnumerable

var categs = SearchResultsCollection.GroupBy(f => GetCategory(f)) 
      .Select(GetCategory(f)).ToList(); 

Antwort

2

Sie können GroupBy in diesem Fall, aber es ist nicht notwendig, da Sie auf eine primitive Eigenschaft projizieren ohnehin - erste Gruppe wählen Sie den Gruppenschlüssel und Bestellung:

var categs = SearchResultsCollection.GroupBy(f => f.categoryName) 
            .Select(g => g.Key) 
            .OrderBy(f => f) 
            .ToList(); 

Oder einfacher mit Distinct():

var categs = SearchResultsCollection.Select(f=> f.categoryName) 
            .Distinct() 
            .OrderBy(c => c) 
            .ToList(); 
Verwandte Themen