web-dev-qa-db-fra.com

Que renvoie LINQ quand les résultats sont vides

J'ai une question sur la requête LINQ. Normalement, une requête renvoie un type IEnumerable<T>. Si le retour est vide, ne savez pas s'il est nul ou non. Je ne suis pas sûr si le ToList() suivant lève une exception ou juste un List<string> vide si rien n'a été trouvé dans IEnumerable le 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.

287
David.Chu.ca

Il retournera un énumérable vide. Ce ne sera pas nul. Tu peux dormir bien :)

462
leppie

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

if (!YourResult.Any())

Juste une note que .Any récupérera toujours les enregistrements de la base de données; faire une .FirstOrDefault()/.Where() sera tout aussi important, mais vous pourrez alors attraper le ou les objets renvoyés par la requête

34
Noich
var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(Le vidage provient de LinqPad )

17
JP Alioto

.ToList renvoie une liste vide. (identique à new List ());

15
Paul van Brenk

Dans Linq-to-SQL, si vous essayez d'obtenir le premier élément d'une requête sans résultats, vous obtiendrez l'erreur sequence contains no elements. 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 retournera pas null car null ne peut pas dire sequence contains no elements il dira toujours object reference not set to an instance of an object;)

8
kay.one

Il ne jettera pas d'exception, vous obtiendrez une liste vide.

6
Jimmy Chandra

D'autres publications ici ont clairement indiqué que le résultat est un IQueryable "vide", ce que ToList () changera correctement pour devenir une liste vide, etc.

Soyez prudent avec certains des opérateurs, car ils jetteront si vous leur envoyez un objet énumérable vide. Cela peut arriver lorsque vous les enchaînez.

6
Spence