Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 35720|Svare: 2

[Kilde] Forskjellen mellom Expression<Func<T, bool>> og Func<T, bool> i EF

[Kopier lenke]
Publisert på 26.09.2021 09:21:21 | | | |
Func<TObject, bool> er en delegat

Uttrykk<Func<TObject, bool>> er uttrykk

Expression vil bli en delegat etter kompilering før den kan kjøres. Som hva

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

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

Da kan du kalle func:

func(5) //-returnerer true

func(200) //- returnerer false

Uttrykk kan ikke kalles direkte.

Sak:Feil spørringskode fører til en fullstendig tabellspørring i databasen

Feilkoden er som følger:

Send en variabel av typen Func som et argument til Count-metoden,EF spør alle dataene i hele tabellen og filtrerer dem fra minnet。 Den genererte SQL-setningen ser slik ut:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Utført DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      VELG [c]. [id], [c]. [client_type], [c]. [status], [c]. [leietaker]
      FRA [tabell] SOM [c]
Den korrekte koden er som følger:

Korrekt skrift legger til en where-betingelse fra databasen og returnerer deretter verdien av tellingen direkte。 Den genererte SQL-setningen ser slik ut:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Utført DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      VELG ANTALL(*)
      FRA [tabell] SOM [c]
      HVOR [c]. [client_type] = 1


EF Core Series 4 ser på de genererte SQL-setningene
https://www.itsvse.com/thread-9564-1-1.html
ef viser de genererte SQL-setningene
https://www.itsvse.com/thread-3813-1-1.html

Ved bruk av Func-delegatkall erSystem.Linq.EnumerableTell nedenfor

Uttrykket som kalles med Expression<Func<T, bool>> erSystem.Linq.QueryableTell nedenfor



(Slutt)





Foregående:[Øv] Lag en grønn no-install versjon av Java JDK Windows
Neste:Java sender SMS-verifiseringskoder gjennom Alibaba Cloud SMS SDK
Publisert på 26.09.2021 16:19:52 |
lærd
Publisert på 26.09.2021 17:31:25 |
Ja, jeg er her for å lære igjen...
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com