Questo funziona:Perché LINQ-to-Entites riconosce il mio metodo personalizzato?
Entities.WorkOrderSet.Where(MyCustomMethod);
Questo non lo fa:
Entities.WorkOrderSet.Where(o => MyCustomMethod(o));
([Edit] Anche senza new
, esso non funziona)
capisco perché il secondo non funziona - ma perché nel mondo fa il primo lavoro !? Non dovrei ottenere un "LINQ-to-Entities non riconosce il metodo ..." in fase di runtime, come con il secondo?
Per riferimento, ecco myCustomMethod
public bool MyCustomMethod(WorkOrder workOrder)
{
return !workOrder.WorkOrderNum.StartsWith("A", StringComparison.CurrentCultureIgnoreCase);
}
Utilizzando EF1, non EF4
Quale eccezione si ottiene quando si tenta di eseguire il secondo? –
Inoltre ... sei sicuro che EF non acquisirà solo l'intera tabella ed eseguirà la funzione localmente quando eseguirai il tuo primo tipo di shippet? Eseguire il profiler SQL e verificare quale query viene inviata al server? –
Ottengo "LINQ-To-Entities non può riconoscere il metodo ..." - questo è il comportamento previsto, poiché i metodi personalizzati non possono essere tradotti in SQL. La solita soluzione è chiamare prima .ToList() ... ma per qualche ragione, sembra che funzioni senza! –