web-dev-qa-db-fra.com

Vérifier si une liste d'objets contient une propriété avec une valeur spécifique

Disons que j'ai le code suivant:

class SampleClass
{
    public int Id {get; set;}
    public int Name {get; set;}
}
List<SampleClass> myList = new List<SampleClass>();
//list is filled with objects
...
string nameToExtract = "test";

Ma question est donc de savoir quelle fonction de liste puis-je utiliser pour extraire de myList uniquement les objets dont la propriété Name correspond à ma chaîne nameToExtract.

Je m'excuse par avance si cette question est vraiment simple/évidente.

56
rybl

Vous pouvez utiliser la méthode d'extension Enumerable.Where :

var matches = myList.Where(p => p.Name == nameToExtract);

Retourne un IEnumerable<SampleClass>. En supposant que vous souhaitiez filtrer List, appelez simplement .ToList() ci-dessus.


À propos, si j'écrivais le code ci-dessus aujourd'hui, je ferais le contrôle d'égalité différemment, compte tenu de la complexité de la gestion des chaînes Unicode:

var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));

Voir aussi

90
Dan J
myList.Where(item=>item.Name == nameToExtract)
9
George Polevoy
using System.Linq;    
list.Where(x=> x.Name == nameToExtract);

Edit: question mal interprétée (maintenant tous les matches)

2
JanW

En plus des autres réponses suggérant LINQ, une autre alternative dans ce cas serait d’utiliser la méthode FindAll :

List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);
1
LukeH