Func<TObject, bool> er en delegeret
Udtryk<Func<TObject, bool>> er udtryk
Udtrykket bliver en delegeret efter kompilering, før det kan køres. Som hvad
Udtryk<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex. Kompiler();
Så kan du kalde func:
func(5) //-returnerer true
func(200) //- returnerer falsk
Udtryk kan ikke kaldes direkte.
Tilfælde:Forkert forespørgselskode forårsager en fuld tabelforespørgsel i databasen。
Fejlkoden er som følger:
Send en variabel af typen Func som argument til Count-metoden,EF forespørger alle data i hele tabellen og filtrerer dem fra hukommelsen。 Den genererede SQL-sætning ser sådan ud:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Udført DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VÆLG [c]. [id], [c]. [client_type], [c]. [status], [c]. [lejer] FRA [tabel] SOM [c] Den korrekte kode er som følger:
Den korrekte skrivning tilføjer en where-betingelse fra databasen og returnerer derefter værdien af tællingen direkte。 Den genererede SQL-sætning ser sådan ud:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Udført DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VÆLG ANTAL(*) FRA [tabel] SOM [c] HVOR [c]. [client_type] = 1
Ved brug af Func delegerede kald erSystem.Linq.EnumerableOptæl nedenfor
Udtrykket kaldes med Expression<Func<T, bool>> erSystem.Linq.QueryableOptæl nedenfor
(Slut)
|