Func<TObject, bool> est un délégué
Expression<Func<TObject, bool>> sont des expressions
L’expression deviendra un délégué après compilation avant de pouvoir être exécutée. Comme quoi
Expression<Func<int, bool>> ex = x=>x < 100 ;
Func<int, bool> func = ex. Compile() ;
Alors vous pouvez appeler func :
func(5) //-retourne vrai
func(200) //- renvoie faux
Les expressions ne peuvent pas être appelées directement.
Cas:Un code de requête incorrect provoque une requête complète de la table de la base de données。
Le code d’erreur est le suivant :
Passer une variable de type Func comme argument à la méthode Count,EF interroge toutes les données de toute la table et les filtre depuis la mémoire。 L’instruction SQL générée ressemble à ceci :
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Exécuté DbCommand (8ms) [Paramètres=[], CommandType='Text', CommandTimeout='30'] SELECT [c]. [id], [c]. [client_type], [c]. [statut], [c]. [locataire] DE [tableau] COMME [c] Le code correct est le suivant :
L’écriture correcte ajoute une condition où provenant de la base de données puis renvoie directement la valeur du compte。 L’instruction SQL générée ressemble à ceci :
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Exécuté de DbCommand (4ms) [Paramètres=[], CommandType='Text', CommandTimeout='30'] SELECT COUNT(*) DE [tableau] COMME [c] OÙ [c]. [client_type] = 1
En utilisant les appels de délégués Func sontSystem.Linq.EnumerableComptage ci-dessous
L’expression appelée avec Expression<Func<T, bool>> estSystem.Linq.QueryableComptage ci-dessous
(Fin)
|