web-dev-qa-db-fra.com

Recherche de la valeur dans une liste d'objets à l'aide de Linq

Disons que j'ai une classe Customer qui a une propriété FirstName. Ensuite, j'ai une liste.

Peut-on utiliser LINQ pour déterminer si la liste a un client avec Firstname = 'John' dans une seule instruction? Comment?

189
Tony_Henrich

LINQ définit une méthode d'extension idéale pour résoudre ce problème:

using System.Linq;
...
    bool has = list.Any(cus => cus.FirstName == "John");

assurez-vous de référencer System.Core.dll, c’est là que vit LINQ.

391
zvolkov

la réponse de zvolkov est la réponse idéale pour savoir si il existe un tel client. Si vous avez besoin de utiliser le client après, vous pouvez faire:

Customer customer = list.FirstOrDefault(cus => cus.FirstName == "John");
if (customer != null)
{
    // Use customer
}

Je sais que ce n’est pas ce que vous demandiez, mais j’ai pensé que j’empêcherais de poser une question suivante :) (Bien sûr, cela ne fait que trouver le premier ce client ... pour tous les trouver , utilisez simplement une clause where normale.)

91
Jon Skeet

Une option pour la question suivante (comment trouver un client pouvant porter un nombre quelconque de prénoms):

List<string> names = new List<string>{ "John", "Max", "Pete" };
bool has = customers.Any(cus => names.Contains(cus.FirstName));

ou pour récupérer le client de CSV de liste similaire 

string input = "John,Max,Pete";
List<string> names = input.Split(',').ToList();
customer = customers.FirstOrDefault(cus => names.Contains(cus.FirstName));
20
Mike Sackton

En utilisant Linq, vous avez beaucoup de possibilités, ici une sans utiliser de lambdas:

//assuming list is a List<Customer> or something queryable...
var hasJohn = (from customer in list
         where customer.FirstName == "John"
         select customer).Any();
9
jmservera
customerList.Any(x=>x.Firstname == "John")
4
Chris Brandsma

La technique que j'ai utilisée avant de découvrir .Any():

var hasJohn = (from customer in list
      where customer.FirstName == "John"
      select customer).FirstOrDefault() != null;
4
Ian Boyd
List<Customer> list = ...;
Customer john = list.SingleOrDefault(customer => customer.Firstname == "John");

john sera null si aucun client n'existe avec un prénom "John".

3
M4N

Une autre possibilité

if (list.Count(customer => customer.Firstname == "John") > 0) {
 //bla
}
1
Krassi

Essayez ceci, j'espère que cela vous aidera.

 if (lstCustumers.Any(cus => cus.Firstname == "John"))
 {
     //TODO CODE
 }
0
Fabio Stratotti