web-dev-qa-db-fra.com

Meilleure façon de récupérer des résultats d'enregistrement uniques 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 je n'aurai aucun résultat ou un résultat. Devrais-je toujours aller de l'avant et récupérer les résultats en utilisant une méthode pour chacun ou existe-t-il un autre moyen privilégié de gérer ce genre de situation. 

42
Tony Peterson

Essayez quelque chose comme ça:

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

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

76
Jorge Ferreira

Pourquoi pas quelque chose comme

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

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

5
James Curran

Je voudrais utiliser First () ou FirstOrDefault ().

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

4
Sam

J'utiliserais la méthode SingleOrDefault.

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

Une autre option consiste à utiliser Contains (nom d'utilisateur) par opposition à "=="

var user = (from u in dc.UserInfo 
                      where u.Users.Contains(username) 
                      select u).SingleOrDefault();
0