Cela fonctionne:Pourquoi LINQ-to-Entites reconnaît-il ma méthode personnalisée?
Entities.WorkOrderSet.Where(MyCustomMethod);
Cela ne signifie pas:
Entities.WorkOrderSet.Where(o => MyCustomMethod(o));
([Modifier] Même sans new
, il ne fonctionne pas)
Je comprends pourquoi la deuxième ne fonctionne pas - mais pourquoi dans le monde fait le premier travail !? Devrais-je obtenir un "LINQ-to-Entities ne reconnaît pas la méthode ..." à l'exécution, comme avec la seconde?
Pour référence, voici myCustomMethod
public bool MyCustomMethod(WorkOrder workOrder)
{
return !workOrder.WorkOrderNum.StartsWith("A", StringComparison.CurrentCultureIgnoreCase);
}
En utilisant EF1, pas EF4
Quelle exception obtenez-vous lorsque vous essayez d'exécuter le second? –
Etes-vous sûr que EF n'obtient pas seulement la totalité de la table et exécute la fonction localement lorsque vous exécutez votre premier shippet? Exécutez le profileur SQL et vérifiez quelle requête est envoyée au serveur? –
Je reçois "LINQ-To-Entities ne peut pas reconnaître la méthode ..." - c'est le comportement attendu, car les méthodes personnalisées ne peuvent pas être traduites en SQL. La solution habituelle est d'appeler .ToList() d'abord ... mais pour une raison quelconque, il semble fonctionner sans cela! –