Je suis en train d'optimiser l'accès DB et je me suis posé des questions sur l'exécution différée. J'ai déjà appris que SomeQueriable.Count()
est beaucoup plus efficace que SomeQueriable.ToList().Count
ou SomeQueriable.ToArray().Length
, car il utilise la méthode natif DB COUNT.exécution LINQ et différée lors de la comparaison avec NULL
Mais qu'en est-il du résultat de la recherche lui-même? Lorsque je veux comparer le résultat de la requête à null, y a-t-il une différence entre SomeQueriable == null
et SomeQueriable.ToList() == null
?
En outre, utilise SomeQueriable.Count()
sûr, ou dois-je toujours vérifier null? En d'autres termes, est
if (SomeQueriable == null || SomeQueriable.Count() == 0)
le même que
if (SomeQueriable.Count() == 0)
ou sera la dernière cause une exception, lorsqu'il n'y a pas de recherche infructueuse?
Si 'SomeQueriable' est une requête réelle et n'est pas explicitement affectée à une valeur nulle, vous n'avez pas besoin de vérifier null. – Magnus
Bien sûr, il y a une différence, car 'SomeQueriable.ToList() == null' lancera un NRE quand 'SomeQueriable' est' Null'. Cependant, il n'est généralement pas nécessaire de vérifier l'un de ceux-ci, car aucune méthode LINQ ne renvoie "null" comme résultat. – HimBromBeere
'db.TableName.ToList(). Count' charge la totalité de la table de base de données en mémoire juste pour obtenir le nombre d'éléments. Bien sûr, c'est inefficace. Mais si vous en avez ou avez besoin de toute façon, il est préférable d'utiliser la propriété 'List.Count' au lieu d'utiliser une requête' Count() 'séparée. De même, 'someThing.ToList()' ** never ** retourne 'null' mais une liste vide. –