Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 35720|Odpověď: 2

[Zdroj] Rozdíl mezi Expression<Func<T, bool>> a Func<T, bool> v EF

[Kopírovat odkaz]
Zveřejněno 26.09.2021 9:21:21 | | | |
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


EF Core Series 4 se dívá na generované SQL příkazy
https://www.itsvse.com/thread-9564-1-1.html
ef zobrazuje generované SQL příkazy
https://www.itsvse.com/thread-3813-1-1.html

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)





Předchozí:[Cvičení] Vytvořte zelenou verzi Java JDK Windows bez instalace
Další:Java posílá SMS ověřovací kódy přes Alibaba Cloud SMS SDK
Zveřejněno 26.09.2021 16:19:52 |
učený
Zveřejněno 26.09.2021 17:31:25 |
Ano, jsem tu, abych se znovu učil...
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com