2009-06-13 8 views
39

J'essaye de construire une page de recherche en utilisant LINQ to Entities, mais le code suivant me donne une erreur d'exécution à propos de l.t.e. ne reconnaît pas 'Boolean StartsWith(). Le code compile bien. Comment puis-je contourner cela mieux que d'expédier le filtrage de StartsWith à un proc stocké?Problème avec LINQ to Entities et String.StartsWith

return from dp in dents.DirectoryPersonEntrySet 
      where 
       ((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || 
       (dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || 
       dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) 
      select dp; 
+0

Pourriez-vous poster le code suivant? Ou le sujet est-il le code complet? Vous voulez dire String.StartsWith au lieu de Boolean.StartsWith? –

+0

@Rutger, merci, j'étais trop rapide pour envoyer envoyer et j'ai oublié le code. J'ai également fixé la signature. – ProfK

+0

Il y a au moins 6 parenthèses en trop, et il nous manque toujours le prototype de la fonction et la définition de la classe ... – em70

Répondre

77

Je suppose que EF ne supporte pas la surcharge de StartsWith qui prend un paramètre StringComparison.

Il devrait soutenir StartsWith, EndsWith et Contient, alors peut-être vous pouvez essayer:

dp.LastName.StartsWith(searchTerm) 

ou:

dp.LastName.ToLower().StartsWith(searchTerm) 

et assurez-vous que searchTerm est également minuscule .

+2

Dead right, l'option de chaîne entière thang throws EF – ProfK

+0

A travaillé comme charme, merci –

+1

Deviné correctement, mais attention qu'il soit insensible à la casse lorsqu'il est traduit en SQL. – marsze

Questions connexes