2012-03-23 11 views

Respuesta

11

Prueba esto:

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == DesiredField.Trim().ToUpper()) 

Además, sugeriría para establecer el parámetro fuera de la consulta:

var value = DesiredField.Trim().ToUpper(); 

... 

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == value) 
+0

esto se traducirá correctamente? –

+0

Sí lo hará, ya que el método ToUpper() se traducirá como SUPERIOR (campo) en su consulta SQL. –

+0

ivowiblo: Humildemente confieso que tenías razón, mi método ContainsLike no se traducirá a SQL. Por favor, consulte mi comentario a mi respuesta para más detalles. Gracias a ti, con toda mi humildad. –

4

Utilice esta:

q => q.Where(entity => 
    String.Equals(entity.CaseInsensitiveField , CaseInsensitiveField , 
        StringComparison.OrdinalIgnoreCase)); 

ACTUALIZACIÓN

Parece ser (por lo menos a través de LINQPad) que lo anterior no se traducirá en SQL, así que yo sugeriría, como ivowiblo ya ha sugerido:

var comparisonValue = CaseInsensitiveField.ToUpper(); 
q => q.Where(entity => 
    entity.CaseInsensitiveField.ToUpper() == comparisonValue); 

la razón para establecer el ToUpper de antemano es que las funciones de procedimiento son generalmente WOR se en SQL, y como este no es un campo de base de datos, podemos enviarlo ya en mayúscula.

+0

+1 uno de los buenos, no sabía nada de él! ¡Gracias por compartir! –

+0

String.Equals se traducirá correctamente? –

+0

'string.Equals' o' entity.CaseInsensitiveField == 'son lo mismo, entonces sí se traduce como una comparación simple como tú. –

Cuestiones relacionadas