2010-12-18 3 views
4

Während ähnlich this question, die mir die LINQ für einen Teil meines Problems gab, vermisse ich etwas, das scheint wie es offensichtlich sein muss, um den letzten Schritt des Durchschleifens zu vermeiden Wörterbuch.Get keys als Liste <> aus dem Wörterbuch für bestimmte Werte

Ich habe ein Wörterbuch und ich möchte eine Liste von Schlüsseln nur für die Elemente erhalten, für die der Wert wahr ist. Im Moment bin ich dies zu tun:

Dictionary<long,bool> ItemChecklist; 
... 


var selectedValues = ItemChecklist.Where(item => item.Value).ToList(); 

List<long> values = new List<long>(); 
foreach (KeyValuePair<long,bool> kvp in selectedValues) { 
    values.Add(kvp.Key); 
} 

Gibt es eine Möglichkeit, direkt mit einem List<long> gehen kann, ohne dass die Schleife zu tun?

Antwort

5

Um es in einer einzigen Anweisung zu tun:

var values = ItemChecklist.Where(item => item.Value).Select(item => item.Key).ToList(); 
4

Try Enumerable.Select mit:

List<long> result = ItemChecklist.Where(kvp => kvp.Value) 
           .Select(kvp => kvp.Key) 
           .ToList(); 
+0

Wow. 11 Sekunden ... danke. Da ihr beide dasselbe geantwortet habt, habe ich es dem Kerl gegeben, der es mehr braucht :) –

Verwandte Themen