Que retourne LINQ lorsque les résultats sont vides

J’ai une question sur la requête LINQ. Normalement, une requête renvoie un type IEnumerable. Si le retour est vide, ne savez pas si elle est nulle ou non. Je ne suis pas sûr si le ToList () suivant lancera une exception ou juste un List vide si rien ne se trouve dans le résultat IEnumerable?

List list = {"a"}; // is the result null or something else? IEnumerable ilist = from x in list where x == "ABC" select x; // Or directly to a list, exception thrown? List 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.

Il retournera un énumérable vide. Ce ne sera pas nul. Vous pouvez dormir le son 🙂

Vous pouvez également vérifier la méthode .Any() :

 if (!YourResult.Any()) 

Juste une note que .Any va toujours récupérer les enregistrements de la firebase database; faire un .FirstOrDefault()/.Where() sera tout autant supérieur mais vous pourrez alors attraper le ou les objects renvoyés par la requête

 var lst = new List() { 1, 2, 3 }; var ans = lst.Where( i => i > 3 ); (ans == null).Dump(); // False (ans.Count() == 0 ).Dump(); // True 

(Dump est de LinqPad )

.ToList renvoie une liste vide. (identique à la nouvelle liste ());

Dans Linq-to-SQL, si vous essayez d’obtenir le premier élément sur 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 aucune valeur nulle car null ne peut pas dire que la sequence contains no elements elle dira toujours que object reference not set to an instance of an object 😉

D’autres articles ici ont clairement indiqué que le résultat est un IQueryable “vide”, que ToList () changera correctement pour devenir une liste vide, etc.

Faites attention à certains opérateurs, car ils lanceront si vous leur envoyez un énumérable vide. Cela peut arriver lorsque vous les enchaînez.

Il ne jettera pas d’exception, vous aurez une liste vide.