2011-06-23 1 views
0

J'ai une liste de KeyValuePairs et je veux la filtrer en fonction de la valeur de la clé, donc j'obtiendrai éventuellement une liste de valeurs filtrées (ce qui signifie qu'elles ne contiendront pas toutes les valeurs de la liste originale).meilleur moyen de recevoir une liste d'objets de la liste de KeyValuePair?

Je suppose que peut-être le meilleur moyen est une forme d'expression lambda, mais je ne suis pas sûr de la façon de le réaliser. Merci, Alon

Répondre

5

Essayez ceci:

var values = list.Where(x => x.Key == "whatever").Select(x => x.Value); 

Cela vous donnera une liste filtrée des valeurs seulement.
Évidemment, vous pouvez changer la façon dont vous filtrez vos clés.

+0

grâce, en fait, il a fait une déclaration LINQ complète - Quelque chose comme ceci: – Alon1980

+0

Code est manquant '.First()'. Doit être 'var values ​​= list.Where (x => x.Key ==" quel que soit "). Sélectionnez (x => x.Value) .First();'. sinon ça ne marche pas. –

0

Utilisez les éléments suivants:

var filteredList = list.Where(x => x.Key == "Key"); 
0

Qu'est-ce que vous cherchez une combinaison de LINQ extension methods (qui dépend de ce que vous essayez de faire exactement).

Par exemple, si j'avais une liste de fruits à leurs couleurs et je voulais obtenir une collection dont les fruits sont rouges, je ferais quelque chose comme:

var fruits = new List<KeyValuePair<string,string>>() { 
      new KeyValuePair<string,string>("Apple", "Green"), 
      new KeyValuePair<string,string>("Orange", "Orange"), 
      new KeyValuePair<string,string>("Strawberry", "Red"), 
      new KeyValuePair<string,string>("Cherry", "Red") 
     }; 

var redFruits = fruits.Where(kvp => kvp.Value == "Red").Select(kvp => kvp.Key); 

// this would result in a IEnumberable<string> { "Strawberry", "Cherry" } 
Questions connexes