2011-08-19 21 views
6

Estoy utilizando MVC3 con Entity Framework 4.1 y tengo una cuadrícula que es buscada por el primer carácter del nombre de la compañía. Lo tengo funcionando bien pero algunas compañías comienzan con un número. Estoy usando la siguiente consulta LINQ para que las empresas comiencen con el número seleccionado, pero ¿cómo puedo seleccionar las que comienzan con un número?Entity Framework: donde el campo comienza con el número

var b = (from c in dbContext.Companies 
      where c.CompanyName.StartsWith(selectedCharacter) 
      select c) 

que he probado:

where char.IsNumber(l.CompanyName[0]) 

Pero, me da un error porque no sabe cómo convertir a SQL.

Editar: Sé que podría hacer .CompanyName.StartsWith ("1") || .CompanyName.StartsWith ("2"), etc. ¿Hay una mejor manera? . ¿Alguna idea?

+2

Y cuál es un problema con c.CompanyName.StartsWith (selectedCharacter) como selectedCharacter todavía puede ser '1', '2' .... – Incognito

+0

Desde que publiqué la pregunta lo probé usando .CompanyName.StartsWith ("1 ") || .CompanyName.StartsWith ("2") y probablemente sea la mejor opción, pero parece repetitivo. El SQL es lo que usted esperaría: DÓNDE ([Extensión1]. [Nombre de la empresa] LIKE '1%') O ([Extensión1]. [Nombre de la empresa] LIKE '2%') O ([Extensión1]. [Nombre de la empresa] LIKE '3%') ... etc. – Jamiegs

Respuesta

9

Podría hacer algo como esto.

var numbers = new string[]{"1","2","3","4","5","6","7","8","9","0"}; 
var b = (from c in dbContext.Companies 
     where numbers.Contains(c.CompanyName.Substring(0,1)) 
     select c).ToList(); 

Sin embargo, puede ocurrir un problema si su empresa está vacía.

+0

Intenté su sugerencia pero recibo la siguiente excepción: No se puede crear un valor constante de tipo 'System.Char'. En este contexto solo se admiten tipos primitivos ('como Int32, String y Guid'). – Jamiegs

+0

Puede simplemente cambiar el nuevo carácter por cadena. Actualizaré mi respuesta ahora. – Jethro

+0

Lo intenté antes, pero ofrece la siguiente excepción: LINQ to Entities no reconoce el método 'System.String ToString()', y este método no se puede traducir a una expresión de tienda. – Jamiegs

Cuestiones relacionadas