2009-06-13 22 views
39

Estoy tratando de crear una página de búsqueda utilizando LINQ to Entities, pero el siguiente código me está dando un error en tiempo de ejecución sobre l.t.e. no reconoce 'Boolean StartsWith(). El código compila muy bien. ¿Cómo puedo evitar esto mejor que enviar el StartsWith filtrando a un proceso almacenado?Problema con LINQ to Entities and 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

¿Podría publicar el 'código siguiente'? ¿O es el sujeto el código completo? ¿Quiere decir String.StartsWith en lugar de Boolean.StartsWith? –

+0

@Rutger, gracias. Fui demasiado rápido para presionar Enviar y olvidé el código. También arreglé la firma. – ProfK

+0

Hay al menos 6 paréntesis en exceso, y aún nos falta el prototipo de función y la definición de clase ... – em70

Respuesta

77

Supongo que EF no admite la sobrecarga de StartsWith que toma un parámetro StringComparison.

Debe apoyar StartsWith, EndsWith y Contiene, por lo que tal vez usted puede probar:

dp.LastName.StartsWith(searchTerm) 

o:

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

y luego asegurarse de que searchTerm también es minúscula .

+2

Muerto a la derecha, la opción de cadena completa thang arroja EF – ProfK

+0

Funcionó como encanto, gracias –

+1

Adivinado correctamente, pero tenga en cuenta que es insensible a las mayúsculas y minúsculas cuando se traduce a SQL. – marsze

Cuestiones relacionadas