Une chose que je viens d'apprendre lors du profilage des requêtes SQL générées par le code EF utilisé dans mon application: il y a une différence entre:
IEnumerable<User> users = DB.User.Where(...);
int count = users.Count();
et
IQueryable<User> users = DB.User.Where(...);
int count = users.Count();
L'ancien génère une requête complète pour extraire les lignes correspondantes de la table User
et le comptage est effectué après le transfert des données vers EF. Ce dernier fait ce qui est généralement attendu: générer un SQL SELECT COUNT ...
, ce qui est beaucoup plus efficace. Ceci est assez subtil mais pas difficile à comprendre pourquoi après l'avoir remarqué: c'est dû à la nature statique de la méthode d'extension C#.
Une petite technique pour se déplacer est d'utiliser le mot-clé « var » pour déclarer la variable:
var users = DB.users.Where(...);
int count = users.Count();
Cela entraînera des « utilisateurs » à déclarer que le même type que le rendement « Aux endroits où les » ; qui est un IQueryable <>.
Ceci est un bon exemple de pourquoi nous devrions utiliser recommend 'var' sur un type de variable spécifique. – Rafid