Func<TObject, bool> je delegát
Výraz<Func<TObject, bool>> jsou výrazy
Výraz se po kompilaci stane delegátem, než může být spuštěn. Jako co
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex. Compile();
Pak můžete nazývat func:
func(5) //-vrací pravdivost
func(200) //- vrací false
Výrazy nelze volat přímo.
Případ:Nesprávný kód dotazu způsobuje dotaz do celé tabulky databáze。
Chybový kód je následující:
Předejte proměnnou typu Func jako argument metodě Count,EF dotazuje všechna data v celé tabulce a filtruje je z paměti。 Generovaný SQL příkaz vypadá takto:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Proveden DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VYBERTE [c]. [id], [c]. [client_type], [c]. [status], [c]. [nájemník] Z [tabulky] AS [c] Správný kód je následující:
Správné zápisy přidají podmínku where z databáze a pak vrátí hodnotu počtu přímo。 Generovaný SQL příkaz vypadá takto:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Proveden DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VYBERTE COUNT(*) Z [tabulky] AS [c] KDE [c]. [client_type] = 1
Pomocí Func delegátních volání jsouSystem.Linq.EnumerablePočet níže
Výraz nazývaný pomocí Expression<Func<T, bool>> jeSystem.Linq.QueryablePočet níže
(Konec)
|