43 votes

Meilleure façon de récupérer les résultats d'un seul enregistrement dans LINQ to SQL

Si j'interroge une table avec une condition sur le champ clé comme dans :

        var user = from u in dc.Users
                   where u.UserName == usn
                   select u;

Je sais que j'obtiendrai soit zéro résultat, soit un résultat. Dois-je quand même récupérer les résultats à l'aide d'un for-each ou existe-t-il un autre moyen de gérer ce type de situation ?

77voto

smink Points 39640

Essayez quelque chose comme ça :

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).FirstOrDefault();

Le site FirstOrDefault La méthode renvoie le premier élément d'une séquence qui satisfait à une condition spécifiée ou une valeur par défaut si aucun élément de ce type n'est trouvé.

18voto

Danimal Points 5721

Pourquoi pas quelque chose comme

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);

5voto

James Curran Points 55356

Il faut également noter que First/FirstOrDefault/Single/SingleOrDefault sont le point d'exécution d'une commande LINQ to Sql. Puisque l'instruction LINQ n'a pas été exécutée avant cela, elle est capable d'affecter le SQL généré (par exemple, elle peut ajouter un TOP 1 à la commande sql).

4voto

Sam Points 9445

J'utiliserais First() ou FirstOrDefault().

La différence : lors de First(), une exception sera levée si aucune ligne ne peut être trouvée.

1voto

Joel Cunningham Points 4579

J'utiliserais la méthode SingleOrDefault.

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).SingleOrDefault();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X