Solía ser el caso de versiones anteriores de EF core. Ahora string.Contains
distingue entre mayúsculas y minúsculas y, por ejemplo, para sqlite se asigna a la función sqlite `instr()' (no sé para postgresql).
Si desea comparar cadenas sin distinguir entre mayúsculas y minúsculas, tiene DbFunctions para hacer el trabajo.
context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();
ACTUALIZAR a @Gert:
Una parte de la suposición en la pregunta es incorrecta. string.Contains
NO se convierte en una expresión LIKE expression
aunque SOLÍA ser el caso en las versiones ef core <=1.0 (creo).
- En SQLServer
string.contains
se convierte enCHARINDEX()
, en oracle y sqlite eninstr()
que distinguen entre mayúsculas y minúsculas de forma predeterminada A MENOS QUE la base de datos o la intercalación de columnas se defina de otra manera (Nuevamente, no sé para postgresql). - En todos los casos
EF.Functions.Like()
se convierte en un SQLLIKE expression
expresión que no distingue entre mayúsculas y minúsculas de forma predeterminada, a menos que la base de datos o la intercalación de columnas se defina de otra manera.
Entonces, sí, todo se reduce a la intercalación, pero, corríjame si me equivoco, de alguna manera el código puede tener una influencia en la búsqueda que distingue entre mayúsculas y minúsculas o que no distingue entre mayúsculas y minúsculas, según cuál de los métodos anteriores utilice.
Ahora, es posible que no esté completamente actualizado, pero no creo que las migraciones principales de EF se ocupen de la intercalación de bases de datos de forma natural y, a menos que ya haya creado la tabla manualmente, terminará con la intercalación predeterminada (se distingue entre mayúsculas y minúsculas para sqlite y yo sinceramente, no sé por los demás).
Volviendo a la pregunta original, tiene al menos 2 opciones para realizar esta búsqueda que no distingue entre mayúsculas y minúsculas, si no 3 en una versión futura:
- Especifique la intercalación de columnas en la creación usando DbContext.OnModelCreating() usando este truco
- Reemplace su
string.Contains
porEF.Functions.Like()
- O espere una característica prometedora aún en discusión:
EF.Functions.Collate()
función