Func<TObject, bool> on delegaat
Expression<Func<TObject, bool>> on avaldised
Expression muutub delegaadiks pärast kompileerimist enne, kui seda saab käivitada. Nagu mis
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex. Compile();
Siis saad kutsuda func:
func(5) //-tagastab tõe
func(200) //- tagastab false
Avaldisi ei saa otseselt kutsuda.
Kohtuasi:Vale päringukood põhjustab andmebaasis täistabeli päringu。
Veakood on järgmine:
Edastame argumendina Func tüüpi muutuja Count meetodile,EF pärib kogu tabeli andmed ja filtreerib need mälust。 Genereeritud SQL-lause näeb välja selline:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Täidetud DbCommand (8ms) [parameetrid=[], CommandType='tekst', CommandTimeout='30'] VALI [c]. [id], [c]. [client_type], [c]. [staatus], [c]. [üürnik] ALATES [laud] AS [c] Õige kood on järgmine:
Õige kirjutamine lisab andmebaasist kus tingimuse ja tagastab seejärel loenduse väärtuse otse。 Genereeritud SQL-lause näeb välja selline:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Täidetud DbCommand (4ms) [parameetrid=[], CommandType='tekst', CommandTimeout='30'] SELECT COUNT(*) ALATES [laud] AS [c] KUS [c]. [client_type] = 1
Func-i delegaatide kõnede kasutamine onSystem.Linq.EnumerableLoend allpool
Avaldis, mida nimetatakse Expression<Func<T, bool>> onSystem.Linq.QueryableLoend allpool
(Lõpp)
|