Esto funciona:¿Por qué LINQ-to-Entites reconoce mi método personalizado?
Entities.WorkOrderSet.Where(MyCustomMethod);
Esto no es así:
Entities.WorkOrderSet.Where(o => MyCustomMethod(o));
([Editar] Incluso sin new
, no funciona)
entiendo por qué la segunda no funciona - , pero ¿por qué en el mundo hace el primer trabajo? ¿No debería obtener un "LINQ-to-Entities no reconoce el método ..." en tiempo de ejecución, como con el segundo?
Para referencia, aquí es MyCustomMethod
public bool MyCustomMethod(WorkOrder workOrder)
{
return !workOrder.WorkOrderNum.StartsWith("A", StringComparison.CurrentCultureIgnoreCase);
}
El uso de EF1, no EF4
¿Qué excepción obtienes cuando intentas ejecutar la segunda? –
Además ... ¿está seguro de que EF no solo obtiene toda la tabla y ejecuta la función localmente cuando ejecuta su primer barco? Ejecute el generador de perfiles SQL y verifique qué consulta se envía al servidor. –
obtengo "LINQ-To-Entities no puede reconocer el método ...": este es el comportamiento esperado, ya que los métodos personalizados no se pueden traducir a SQL. La solución habitual es llamar a .ToList() primero ... ¡pero por alguna razón parece que funciona sin eso! –