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.
Il retournera un énumérable vide. Ce ne sera pas nul. Tu peux dormir bien :)
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
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 )
.ToList renvoie une liste vide. (identique à new List ());
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
;)
Il ne jettera pas d'exception, vous obtiendrez une liste vide.
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.