Este código distingue entre mayúsculas y minúsculas, ¿cómo hacerlo?
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
}
Respuestas:
Asumiendo que estamos trabajando con cadenas aquí, aquí hay otra solución "elegante" usando
IndexOf()
.fuente
fuente
IEqualityComparer<string>
atributo para manejar cómo funcionará la comparación. Usar ToLower y ToUpper para verificar la igualdad es una mala idea. Prueba:.Contains(description, StringComparer.CurrentCultureIgnoreCase)
por ejemploError 1 'string' does not contain a definition for 'Contains' and the best extension method overload 'System.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource, System.Collections.Generic.IEqualityComparer<TSource>)' has some invalid arguments
Contains
withStringComparer
no recibe una cadena como parámetro, por lo que será un error de compilación.IndexOf
elQueryable
probablemente no se pueden traducir en SQL. Personalmente, esta respuesta me pareció totalmente válida mientras hablamos de LINQ to database.Si la consulta LINQ se ejecuta en el contexto de la base de datos,
Contains()
se asigna una llamada alLIKE
operador:.Where(a => a.Field.Contains("hello"))
se convierteField LIKE '%hello%'
. ElLIKE
operador no distingue entre mayúsculas y minúsculas de forma predeterminada, pero eso se puede cambiar cambiando la clasificación de la columna .Si la consulta LINQ se ejecuta en contexto .NET, puede usar IndexOf () , pero ese método no es compatible con LINQ to SQL.
LINQ to SQL no admite métodos que toman un CultureInfo como parámetro, probablemente porque no puede garantizar que el servidor SQL maneje cultivos de la misma manera que .NET. Esto no es completamente cierto, porque sí es compatible
StartsWith(string, StringComparison)
.Sin embargo, no parece admitir un método que se evalúe
LIKE
en LINQ to SQL y en una comparación de mayúsculas y minúsculas en .NET, por lo que es imposible hacer Contains () insensible a mayúsculas y minúsculas de manera consistente.fuente
insensitive
de búsqueda, y en la otra lo necesito para sercase sensitive
. ¿Debo tomar el golpe de rendimiento y usar 'toLower ()'?La respuesta aceptada aquí no menciona un hecho de que si tiene una cadena nula ToLower () arrojará una excepción. La forma más segura sería hacer:
fuente
Usando C # 6.0 (que permite funciones corporales de expresión y propagación nula), para LINQ to Objects, se puede hacer en una sola línea como esta (también buscando null):
fuente
IndexOf funciona mejor en este caso
fuente
Puedes usar string.Compare
si solo desea verificar los contenidos, use "Cualquiera"
fuente
fuente
fuente
Honestamente, esto no tiene por qué ser difícil. Puede parecer que al principio, pero no lo es. Aquí hay una consulta simple de linq en C # que hace exactamente lo solicitado.
En mi ejemplo, estoy trabajando contra una lista de personas que tienen una propiedad llamada FirstName.
Esto buscará en la base de datos en la búsqueda de minúsculas pero devolverá los resultados completos de las mayúsculas.
fuente
Utilice el método String.Equals
fuente