Ce n'LINQ retour lorsque les résultats sont vides
J'ai une question à propos d'une requête LINQ. Normalement une requête renvoie un IEnumerable<T>
type. Si le retour est vide, vous ne savez pas si elle est nulle ou pas. Je ne suis pas sûr si les conditions suivantes ToList()
lèvera une exception ou tout simplement un vide List<string>
si rien n'a été trouvé dans IEnumerable
résultat?
List<string> list = {"a"};
//is the result null or something else?
IEnumerable<string> ilist = from x in list where x == "ABC" select x;
//Or directly to a list, exception thrown?
List<string> list1 = (from x in list where x == "ABC" select x).ToList();
Je sais que c'est une question très simple, mais je n'ai pas de VS sont disponibles pour le moment.
- Je suppose que le résultat est Énumérable.Est-il vide?
Vous devez vous connecter pour publier un commentaire.
Il sera de retour un vide énumérable. Il ne sera pas nulle. Vous pouvez dormir son 🙂
Vous pouvez également vérifier le
.Any()
méthode:Juste une remarque que
.Any
toujours récupérer les enregistrements de la base de données; faire un.FirstOrDefault()/.Where()
sera tout autant les frais généraux, mais vous serait alors en mesure de rattraper l'objet(s) retourné par la requête.Any()
va juste pour vous dire si vous avez des enregistrements correspondants, à tous, où l'on fait une requête pour trouver une valeur spécifique peut être null lorsque.Any()
ne l'est pas.(Dump est de LinqPad)
Count()
est aussi une méthode, pas seulement la propriété.ToList retourne une liste vide. (même que la nouvelle Liste() );
Dans Linq-to-SQL si vous essayez d'obtenir le premier élément sur une requête sans résultats que vous obtiendrez
sequence contains no elements
erreur. Je peux vous assurer que l'erreur mentionnée n'est pas égal àobject reference not set to an instance of an object
.en conclusion, non, il ne retourne pas null car nul ne peut le dire
sequence contains no elements
il va toujours direobject reference not set to an instance of an object
😉Il ne lance pas d'exception, vous obtiendrez une liste vide.
D'autres posts ici ont fait, il est clair que le résultat est un "vide", IQueryable, qui ToList() correctement, le changement une liste vide etc.
Faire attention avec certains opérateurs, comme ils vont jeter si vous leur envoyez un vide énumérable. Cela peut se produire lorsque vous avez de la chaîne d'ensemble.