Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 35720|Svar: 2

[Källa] Skillnaden mellan Expression<Func<T, bool>> och Func<T, bool> i EF

[Kopiera länk]
Publicerad på 2021-09-26 09:21:21 | | | |
Func<TObject, bool> är en delegat

Expression<Func<TObject, bool>> är uttryck

Uttrycket blir en delegat efter kompilation innan det kan köras. Som vad

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

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

Då kan du anropa func:

func(5) //-återvänder true

func(200) //- returnerar false

Uttryck kan inte anropas direkt.

Fall:Felaktig frågekod orsakar en fullständig tabellfråga i databasen

Felkoden är följande:

Skicka en variabel av typen Func som argument till Count-metoden,EF frågar all data i hela tabellen och filtrerar den från minnet。 Den genererade SQL-satsen ser ut så här:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Utförd DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      VÄLJ [c]. [id], [c]. [client_type], [c]. [status], [c]. [hyresgäst]
      FRÅN [tabell] SOM [c]
Den korrekta koden är följande:

Den korrekta skrivningen lägger till ett where-villkor från databasen och returnerar sedan värdet av räkningen direkt。 Den genererade SQL-satsen ser ut så här:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Utförd DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      VÄLJ RÄKNING(*)
      FRÅN [tabell] SOM [c]
      DÄR [c]. [client_type] = 1


EF Core Series 4 tittar på de genererade SQL-satserna
https://www.itsvse.com/thread-9564-1-1.html
ef visar de genererade SQL-satserna
https://www.itsvse.com/thread-3813-1-1.html

Med Func-delegatanrop ärSystem.Linq.EnumerableRäkna nedan

Uttrycket som kallas med Expression<Func<T, bool>> ärSystem.Linq.QueryableRäkna nedan



(Slut)





Föregående:[Övning] Gör en grön version utan installation av Java JDK Windows
Nästa:Java skickar SMS-verifieringskoder via Alibaba Cloud SMS SDK
Publicerad på 2021-09-26 16:19:52 |
lärd
Publicerad på 2021-09-26 17:31:25 |
Ja, jag är här för att lära mig igen...
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com