Func<TObject, bool> ist ein Delegierter
Ausdruck<Func<TObject, bool>> sind Ausdrücke
Der Ausdruck wird nach der Kompilierung zu einem Delegierten, bevor er ausgeführt werden kann. Zum Beispiel
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex. Compile();
Dann kannst du func aufrufen:
func(5) //-Returns true
func(200) //- gibt falsch zurück
Ausdrücke können nicht direkt aufgerufen werden.
Fall:Falscher Abfragecode führt zu einer vollständigen Tabellenabfrage in der Datenbank。
Der Fehlercode lautet wie folgt:
Übergebe eine Variable vom Typ Func als Argument an die Count-Methode,EF fragt alle Daten der gesamten Tabelle ab und filtert sie aus dem Speicher。 Die generierte SQL-Anweisung sieht so aus:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Ausgeführt DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [c]. [id], [c]. [client_type], [c]. [Status], [c]. [Mieter] AUS [Tabelle] ALS [c] Der korrekte Code lautet wie folgt:
Die korrekte Schreibweise fügt eine where-Bedingung aus der Datenbank hinzu und gibt dann direkt den Wert des Counts zurück。 Die generierte SQL-Anweisung sieht so aus:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Ausgeführt DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] WÄHLE ANZAHL(*) AUS [Tabelle] ALS [c] WO [c]. [client_type] = 1
Mit Func-Delegiertenaufrufen sindSystem.Linq.EnumerableZähle unten
Der mit Expression<Func<T, bool>> bezeichnete Ausdruck istSystem.Linq.QueryableZähle unten
(Ende)
|