2009-03-09 17 views
190

Ich habe eine Sammlung von MyClass, die ich abfragen möchte mit LINQ, um unterschiedliche Werte zu erhalten, und erhalten Sie ein Wörterbuch < String, string> als Ergebnis, aber ich Ich kann nicht herausfinden, wie ich es einfacher machen kann als ich es hier unten mache. Was wäre ein sauberer Code, den ich verwenden kann, um das Dictionary < string, string> als Ergebnis zu bekommen?LINQ-Abfrage zum Zurückgeben eines Dictionary <string, string>

var desiredResults = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 

var queryResults = (from MyClass mc in myClassCollection 
        orderby bp.SomePropToSortOn 
        select new KeyValuePair<string, string>(mc.KeyProp, mc.ValueProp)).Distinct(); 

foreach (var item in queryResults) 
{ 
    desiredResults.Add(item.Key.ToString(), item.Value.ToString()); 
} 
+5

Was soll es mit doppelten Schlüsseln tun? Nimm einfach die erste und ignoriere die nächsten? Seien Sie sich bewusst, dass Wörterbücher nicht geordnet sind, so dass Ihre Bestellung in der Abfrage keine Auswirkung hat ... –

+1

Vielleicht, was Sie suchen, ist die SortedDictionary-Implementierung von IDictionary. Sonst ist das Sortieren über ein Dictionary sinnlos. – Fede

Antwort

318

Verwenden Sie die ToDictionary Methode direkt.

var result = 
    // as Jon Skeet pointed out, OrderBy is useless here, I just leave it 
    // show how to use OrderBy in a LINQ query 
    myClassCollection.OrderBy(mc => mc.SomePropToSortOn) 
        .ToDictionary(mc => mc.KeyProp.ToString(), 
           mc => mc.ValueProp.ToString(), 
           StringComparer.OrdinalIgnoreCase); 
+1

Mehrdad, danke für den Hinweis darauf. Das war die Richtung, in die ich ging, aber ich muss die korrekte Überladung von ToDictionary übersehen haben. –

15

Blick auf die ToLookup und/oder ToDictionary Erweiterungsmethoden.

Verwandte Themen