Func<TObject, bool> je delegat
Izrazi<Func<TObject, bool>> so izrazi
Izraz postane delegat po prevajanju, preden se lahko izvede. Kaj na primer
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex. Compile();
Potem lahko pokličete func:
func(5) //-vrne resnično
func(200) //- vrne napačno
Izrazov ni mogoče klicati neposredno.
Kovček:Nepravilna poizvedbena koda povzroči polno tabelo v bazi podatkov。
Koda napake je naslednja:
Spremenljivko tipa Func kot argument pošljimo metodi Count,EF poizveduje vse podatke v celotni tabeli in jih filtrira iz pomnilnika。 Generirana SQL izjava izgleda takole:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Izveden DbCommand (8ms) [Parametri=[], CommandType='Text', CommandTimeout='30'] IZBERI [c]. [id], [c]. [client_type], [c]. [status], [c]. [najemnik] IZ [miza] KOT [c] Pravilna koda je naslednja:
Pravilno pisanje doda pogoj where iz baze podatkov in nato neposredno vrne vrednost štetja。 Generirana SQL izjava izgleda takole:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Izveden DbCommand (4ms) [Parametri=[], CommandType='Text', CommandTimeout='30'] IZBERI COUNT(*) IZ [miza] KOT [c] KJER [c]. [client_type] = 1
Uporaba klica delegatov Func soSystem.Linq.EnumerableŠtetje spodaj
Izraz, imenovan z Expression<Func<T, bool>> jeSystem.Linq.QueryableŠtetje spodaj
(Konec)
|