Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

908
Vistas
Núcleo de Entity Framework: ¿contiene mayúsculas o minúsculas?

"Contiene" en el núcleo de Entity Framework debería ser equivalente al operador SQL %like%. Por lo tanto, "Contiene" no debe distinguir entre mayúsculas y minúsculas, ¡sin embargo, distingue entre mayúsculas y minúsculas! (al menos en postgres????)

Lo siguiente solo genera un resultado cuando se usa la mayúscula correcta para la palabra clave.

 context.Counties.Where(x => x.Name.Contains(keyword)).ToList();

¿Qué estoy haciendo mal?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Solía ser el caso de versiones anteriores de EF core. Ahora string.Contains 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 LIKE expression aunque SOLÍA ser el caso en las versiones ef core <= 1.0 (creo).

  • En SQLServer string.contains se convierte en CHARINDEX() , en Oracle y sqlite en instr() que distinguen entre mayúsculas y minúsculas de forma predeterminada A MENOS QUE la intercalación de columnas o db se defina de otra manera (nuevamente, no sé para postgresql).
  • En todos los casos, EF.Functions.Like() se convierte en una expresión SQL LIKE que no distingue entre mayúsculas y minúsculas de forma predeterminada, a menos que se defina de otra manera la intercalación de columnas o db.

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 honestamente no sé para 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:

  1. Especifique la intercalación de columnas en la creación usando DbContext.OnModelCreating() usando este truco
  2. Reemplace su cadena. Contiene por string.Contains EF.Functions.Like()
  3. O espere una característica prometedora aún en discusión : función EF.Functions.Collate()
over 4 years ago · Santiago Trujillo Denunciar

0

Mi respuesta se referirá a NpgSQL.

  1. EF.Functions.Like() en PostgreSQL distingue entre mayúsculas y minúsculas, pero puede usar el método de extensión EF.Functions.ILike() ubicado en el ensamblado Npgsql.EntityFrameworkCore.PostgreSQL .

  2. Si no tiene una referencia al ensamblaje de Entity Framework en el lugar donde crea la consulta, puede usar los métodos combinados ToLower() y Contains() , porque Npgsql puede traducir el método ToLower() para corregir SQL

Ejemplo:

 context.Counties.Where(x => x.Name.ToLower().Contains(keyword.ToLower())).ToList();

Sobre el segundo método, tenga en cuenta: es posible que tenga problemas de rendimiento y que encuentre problemas asociados con la codificación.

over 4 years ago · Santiago Trujillo Denunciar

0

IQueryable.Where se ejecuta en la base de datos, por lo que es más probable que no distinga entre mayúsculas y minúsculas.

IEnumerable.Where usa C# String.Contains , por lo que distingue entre mayúsculas y minúsculas.

Lea esta respuesta: Devolver IEnumerable vs. IQueryable

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda