Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 35720|Risposta: 2

[Fonte] La differenza tra Expression<Func<T, bool>> e Func<T, bool> in EF

[Copiato link]
Pubblicato su 26/09/2021 09:21:21 | | | |
Func<TObject, bool> è un delegato

Expression<Func<TObject, bool>> sono espressioni

L'espressione diventerà un delegato dopo la compilazione prima di poter essere eseguita. Come cosa

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

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

Poi puoi chiamare func:

func(5) //-restituisce vero

func(200) //- restituisce false

Le espressioni non possono essere chiamate direttamente.

Caso:Un codice di query errato causa una query completa della tabella del database

Il codice di errore è il seguente:

Passare una variabile di tipo Func come argomento al metodo Count,EF interroga tutti i dati dell'intera tabella e li filtra dalla memoria。 L'istruzione SQL generata appare così:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Esecuzione di DbCommand (8ms) [Parametri=[], CommandType='Text', CommandTimeout='30']
      SELECT [c]. [id], [c]. [client_type], [c]. [status], [c]. [inquilino]
      DA [tabella] COME [c]
Il codice corretto è il seguente:

La scrittura corretta aggiunge una condizione where dal database e poi restituisce direttamente il valore del conteggio。 L'istruzione SQL generata appare così:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Esecuzione di DbCommand (4ms) [Parametri=[], CommandType='Text', CommandTimeout='30']
      SELECT COUNT(*)
      DA [tabella] COME [c]
      DOVE [c]. [client_type] = 1


EF Core Series 4 esamina le istruzioni SQL generate
https://www.itsvse.com/thread-9564-1-1.html
ef visualizza le istruzioni SQL generate
https://www.itsvse.com/thread-3813-1-1.html

Utilizzando le chiamate delegate Func sonoSystem.Linq.EnumerableConteggio qui sotto

L'espressione chiamata con Expression<Func<T, bool>> èSystem.Linq.QueryableConteggio qui sotto



(Fine)





Precedente:[Pratica] Crea una versione verde senza installazione di Java JDK Windows
Prossimo:Java invia codici di verifica SMS tramite Alibaba Cloud SMS SDK
Pubblicato su 26/09/2021 16:19:52 |
istruito
Pubblicato su 26/09/2021 17:31:25 |
Sì, sono qui per imparare di nuovo...
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com