Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 35720|Odpoveď: 2

[Zdroj] Rozdiel medzi Expression<Func<T, bool>> a Func<T, bool> v EF

[Kopírovať odkaz]
Zverejnené 26. 9. 2021 9:21:21 | | | |
Func<TObject, bool> je delegát

Expression<Func<TObject, bool>> sú výrazy

Expression sa po kompilácii stane delegátom, kým ho nemožno spustiť. Ako čo

Expression<Func<int, bool>> ex = x=>x < 100;

Func<int, bool> func = ex. Compile();

Potom môžete volať func:

func(5) //-vracia pravdivosť

func(200) //- vracia false

Výrazy nie je možné volať priamo.

Prípad:Nesprávny kód dotazu spôsobuje úplný tabuľkový dotaz databázy

Chybový kód je nasledovný:

Prejdite premennú typu Func ako argument do metódy Count,EF dotazuje všetky údaje v celej tabuľke a filtruje ich z pamäte。 Generovaný SQL príkaz vyzerá takto:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Vykonaný DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      VYBRAŤ [c]. [id], [c]. [client_type], [c]. [stav], [c]. [nájomca]
      Z [stola] AS [c]
Správny kód je nasledovný:

Správne napísanie pridá podmienku where z databázy a potom vráti hodnotu počtu priamo。 Generovaný SQL príkaz vyzerá takto:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Vykonaný DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      VYBERTE COUNT(*)
      Z [stola] AS [c]
      KDE [c]. [client_type] = 1


EF Core Series 4 skúma generované SQL príkazy
https://www.itsvse.com/thread-9564-1-1.html
ef zobrazuje generované SQL príkazy
https://www.itsvse.com/thread-3813-1-1.html

Pomocou Func delegátov volaní súSystem.Linq.EnumerablePočet nižšie

Výraz nazývaný Expression<Func<T, bool>> jeSystem.Linq.QueryablePočet nižšie



(Koniec)





Predchádzajúci:[Cvičenie] Vytvorte zelenú verziu Java JDK Windows bez inštalácie
Budúci:Java posiela SMS overovacie kódy cez Alibaba Cloud SMS SDK
Zverejnené 26. 9. 2021 16:19:52 |
učený
Zverejnené 26. 9. 2021 17:31:25 |
Áno, som tu, aby som sa znova učil...
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com