Vérifier si une seule() LINQ retourner la valeur NULL
J'ai une requête LINQ qui doit renvoyer un résultat unique ou pas de résultats. J'appelle Single()
pour obtenir le résultat comme ceci:
var propertyDataSource = (from x in myCollection
where SomeCondition(x)
select x).Single();
Cela fonctionne ok lorsque ma requête a qu'un seul résultat, mais si il n'y a pas des résultats il jette à un System.InvalidOperationException
avec le message Séquence contient pas d'éléments.
Comment puis-je résoudre ce problème?
OriginalL'auteur Mina Gabriel | 2014-01-17
Vous devez vous connecter pour publier un commentaire.
Utilisation
SingleOrDefault
à la place.déclenche une exception lorsque l'énumération ne contient exactement un élément,
SingleOrDefault<T>
retournepar défaut(T)
(qui estnull
pour les types référence) lorsqu'il est appelé sur vide énumérations à la place. Notez que les deux vont se jeter si il n'y a plus d'un élément de l'énumération.OriginalL'auteur MarcinJuraszek
.SingleOrDefault()
sera de retour l'unique objet correspondant ou la valeur par défaut (qui estnull
pour les types référence. Vous devrez gérer lanull
cas vous-même, mais parce que vous finirez avec unNullReferenceException
assez rapidement.Comme une note de côté, vous devez utiliser
.Any()
au lieu de.Count() > 0
pour éviter de parcourir votre ensemble de données lors de l'utilisation deIEnumerable
s.OriginalL'auteur dee-see
De par leur conception,
lèvera une exception lorsque la séquence est vide. Utilisation
SingleOrDefault
de retournull
lorsque votre séquence est vide.OriginalL'auteur Douglas
.FirstOrDefault()
renvoie la valeur null (ou par défaut le type) si rien n'existe aucune correspondance n'est trouvée),.Single()
va attendre un match..SingleOrDefault()
renvoie la valeur null (ou par défaut le type) si rien n'existe, mais va lever une exception si vous avez plus d'un match.OriginalL'auteur AD.Net