Func<TObject, bool> es un delegado
Expresión<Func<TObject, bool>> son expresiones
La expresión se convertirá en un delegado tras la compilación antes de poder ejecutarse. Como qué
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex. Compilar();
Entonces puedes llamar a func:
func(5) //-devuelve verdadero
func(200) //- devuelve false
Las expresiones no pueden llamarse directamente.
Caso:Un código de consulta incorrecto provoca una consulta completa de tabla en la base de datos。
El código de error es el siguiente:
Pasa una variable de tipo Func como argumento al método Count,EF consulta todos los datos de toda la tabla y los filtra de la memoria。 La sentencia SQL generada se ve así:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] DbCommand ejecutado (8ms) [Parámetros=[], CommandType='Text', CommandTimeout='30'] SELECT [c]. [id], [c]. [client_type], [c]. [estado], [c]. [inquilino] DE [tabla] COMO [c] El código correcto es el siguiente:
La escritura correcta añade una condición where de la base de datos y luego devuelve directamente el valor del conteo。 La sentencia SQL generada se ve así:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Ejecutado DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT COUNT(*) DE [tabla] COMO [c] DONDE [c]. [client_type] = 1
Usando llamadas a delegados Func sonSystem.Linq.EnumerableCuenta abajo
La expresión llamada con Expresión<Func<T, bool>> esSystem.Linq.ConsultyableCuenta abajo
(Fin)
|