Eine Sache, die ich gerade gelernt haben, wenn die SQLs Profilierung von EF-Code generiert in meiner Anwendung verwendet: Es gibt einen Unterschied zwischen:
IEnumerable<User> users = DB.User.Where(...);
int count = users.Count();
und
IQueryable<User> users = DB.User.Where(...);
int count = users.Count();
der ehemaligen generiert eine vollständige Abfrage, um übereinstimmende Zeilen aus der Tabelle User
abzurufen, und die Zählung erfolgt, nachdem die Daten zurück an EF übertragen wurden. Letzteres tut, was allgemein erwartet wird: Erzeugen Sie einen SELECT COUNT ...
SQL, der viel effizienter ist.
Dies ist ziemlich subtil, aber nicht schwer zu verstehen, warum, nachdem es bemerkt: es ist aufgrund der statisch gebundenen Natur der C# -Erweiterungsmethode.
Eine kleine Technik, dies zu umgehen ist es, das „var“ Schlüsselwort zu verwenden, um die Variable zu deklarieren:
var users = DB.users.Where(...);
int count = users.Count();
Dies wird „Benutzer“ verursacht als die gleiche Art erklärt wird, dass „.Where“ Erträge ; Das ist ein IQueryable <>.
Dies ist ein gutes Beispiel dafür, warum wir 'var' über den spezifischen Variablentyp empfehlen sollten. – Rafid