J'ai une question concernant la requête LINQ. Normalement, une requête renvoie un IEnumerable<T>
type. Si le retour est vide, vous ne savez pas s'il est nul ou non. Je ne sais pas si ce qui suit ToList()
lèvera une exception ou juste un vide List<string>
si rien ne se trouve dans le 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 disponible pour le moment.
Réponses:
Il renverra un énumérable vide. Ce ne sera pas nul. Vous pouvez dormir le son :)
la source
Vous pouvez également vérifier la
.Any()
méthode:Juste une note qui
.Any
va quand même récupérer les enregistrements de la base de données; faire un.FirstOrDefault()/.Where()
sera tout autant de surcharge mais vous pourrez alors attraper le ou les objets retournés par la requêtela source
.Any()
que cela va juste vous dire si vous avez des enregistrements correspondants, où faire une requête réelle pour trouver une valeur spécifique peut être nul quand ce.Any()
n'est pas le cas.(Le vidage est de LinqPad )
la source
Count()
est aussi une méthode, pas seulement la propriété.ToList renvoie une liste vide. (identique à la nouvelle liste ());
la source
Dans Linq-to-SQL, si vous essayez d'obtenir le premier élément d'une requête sans résultat, vous obtiendrez une
sequence contains no elements
erreur. Je peux vous assurer que l'erreur mentionnée n'est pas égale àobject reference not set to an instance of an object
. en conclusion non, il ne renverra pas null puisque null ne peut pas diresequence contains no elements
qu'il dira toujoursobject reference not set to an instance of an object
;)la source
D'autres articles ici ont indiqué clairement que le résultat est un IQueryable "vide", que ToList () changera correctement pour être une liste vide, etc.
Soyez prudent avec certains des opérateurs, car ils lanceront si vous leur envoyez un énumérable vide. Cela peut se produire lorsque vous les enchaînez.
la source
Il ne lèvera pas d'exception, vous obtiendrez une liste vide.
la source