Par exemple, si j'avais un contexte de données Linq to SQL, ou si j'avais ADO.NET Entity Framework entités mises en correspondance avec une table de base de données, et je veux tester un seul client ...Dans LINQ, quelle est la principale différence/utilité entre .Any <> et .Where <> pour tester les enregistrements existants
y at-il beaucoup de différence entre:
MyDatabaseContext.Customers.Any(c => c.CustomerId == 3)
et
MyDatabaseContext.Customers.Where(c => c.CustomerId == 3)
.Tout <> - retour type bool
.Lorsque <> - type de retour IQueryable
EDIT: Correction formulation de la question après avoir accepté de réponse Fredrik Mörk - merci.
pinailler: Où retourne un IEnumerable lorsqu'il est utilisé dans un Linq à contexte des objets.L'OP a donné l'exemple en tant que contexte Linq to SQL, donc il retournerait un IQueryable. Pas que ça compte beaucoup. Le mieux serait d'écrire 'IEnumerable/IQueryable', ou une séquence. –
@Martinho: les bons points. Cependant, je continuerais à argumenter que 'Where <>' renvoie un 'IEnumerable' pour deux raisons: l'une est que' IQueryable' hérite de 'IEnumerable'. Une autre raison est que lorsque je traite avec des interfaces, je préfère généralement m'en tenir à l'interface définie par le contrat, plutôt que ce qui est * effectivement * renvoyé par le fournisseur sous-jacent. De cette façon, le code dépend moins des composants internes des méthodes appelées, ce qui le rend plus portable. –
"while Où devra toujours boucler tous les éléments avant de renvoyer le résultat" Pas toujours vrai. Par exemple, dans LINQ to objects, puisque le 'IEnumerable' renvoyé est évalué paresseusement, si vous ajoutez un '.Any()' à '.Where (quelque chose)', ** il ne ** passera pas sur tous les éléments . –