Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

909
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda