2016-05-19 15 views
1

Ich habe wie ähnliche Anfrage in untenstehenden Link„Gruppierung“ Wörterbuch nach dem Wert der Klasseneigenschaft

"Grouping" dictionary by value

Aber ich mag Gruppe basierend auf Eigenschaft der Klasse.

public class myClass1 
{ 
    public int id { get; set; } 
    public string networkId { get; set; } 
} 

Im folgenden Beispiel möchte ich eine Gruppe von NetworkID

 var obj1 = new myClass1() { id = 11, networkId = "asdf1" }; 
     var obj2 = new myClass1() { id = 22, networkId = "asdf2" }; 
     var obj3 = new myClass1() { id = 33, networkId = "asdf3" }; 
     var obj4 = new myClass1() { id = 44, networkId = "asdf1" }; 
     var obj5 = new myClass1() { id = 55, networkId = "asdf2" }; 
     var obj6 = new myClass1() { id = 66, networkId = "asdf1" }; 
     var obj7 = new myClass1() { id = 77, networkId = "asdf1" }; 

     var classDictionary = new Dictionary<int, myClass1>(); 
     classDictionary.Add(1, obj1); 
     classDictionary.Add(2, obj2); 
     classDictionary.Add(3, obj3); 
     classDictionary.Add(4, obj4); 
     classDictionary.Add(5, obj5); 
     classDictionary.Add(6, obj6); 
     classDictionary.Add(7, obj7); 

     Dictionary<myClass1, List<int>> test2 = 
          classDictionary.GroupBy(r => r.Value.networkId) 
          //.ToDictionary(t => t.Key, t => t.Select(r => r.Value).ToList()); 

so dass das Ergebnis sein würde, ein Wörterbuch mit Schlüsselwert als je unter

"asdf1" -> List of obj1, obj4, obj6, obj7 
"asdf2" -> List of obj2, obj5 
"asdf3" -> List of obj3 

Jede Hilfe?

+1

Funktioniert das nicht? '. ToDictionary (t => t.Key, t => t.Wählen Sie (r => r.Value) .ToList());' – Rob

+0

Nein, einige Kompilierung Fehler – user3663854

+1

Oh, sollte es sein 'var test2 =' (oder 'Dictionary > test2 ='), da Sie eine Liste von 'myClass1', nicht' int' wollen. Auch in Zukunft bitte Fehlermeldungen, nicht nur, dass es ein Kompilierungsfehler ist - das hilft nicht sehr viel :) – Rob

Antwort

3

Sie waren sehr nah dran. Sie müssen lediglich das Zielwörterbuch Struktur auf den folgende Aktualisierung:

Dictionary<string, List<myClass1>> test2 = classDictionary 
    .GroupBy(r => r.Value.networkId) 
    .ToDictionary(t => t.Key, t => t.Select(r => r.Value).ToList()); 

Dies erzeugt die folgende Ausgabe:

enter image description here

Es ist erwähnenswert, dass dies ein ausgezeichneter Anwendungsfall für var statt den Typ explizit benennen, da er Ihren Ausgabetyp für Sie bestimmt. Dies ist oft hilfreich, wenn Sie versuchen, den Endtyp zu bestimmen.

Verwandte Themen