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

477
Vistas
.Net Core 3.1 Linq to Entities: cómo concatenar cadenas en la cláusula where

Tengo una tabla de usuario con columnas [FirstName] y [LastName]. Estoy tratando de crear una función de búsqueda que devuelva a los usuarios que cumplen uno de los siguientes criterios:

  • Nombre == miPatrón, o
  • Apellido == miPatrón, o
  • Nombre Apellido == miPatrón

Por ejemplo, si tengo los siguientes usuarios en mi base de datos:

  • gato uno
  • jota dos
  • jota tres

Me gustaría que la función los devuelva todos cuando la entrada sea Jack , pero solo devuelva Jack One cuando la entrada sea Jack One

Actualmente tengo el siguiente código:

 var users = context.User.Where(x => x.FirstName == pattern || x.LastName == pattern || x.FirstName + " " + x.LastName == pattern)

Pero esto no funciona ya que se traduce a la siguiente consulta en MySQL

 ...WHERE (`p`.`firstName` = 'Jack One') OR (`p`.`lastName` = 'Jack One')) OR (((`p`.`firstName` + ' ') + `p`.`lastName`) = 'Jack One')

No funciona porque creo que necesitamos usar CONCAT(firstName, ' ', lastName) si quiero concatenar varias cadenas en MySQL.

Intenté usar las siguientes funciones de .NET, pero no se pueden traducir a sql (La expresión LINQ... no se pudo traducir. O reescriba la consulta en un formulario que se pueda traducir, o cambie a la evaluación del cliente explícitamente insertando una llamada a ya sea AsEnumerable(), AsAsyncEnumerable(), ToList() o ToListAsync())

  • string.Join(' ', nombre, apellido)
  • string.Concat(nombre, " ", apellido)

¿Cómo puedo lograr esto en .NET CORE 3.1 sin extraer todos los datos en la memoria y evaluarlos en el cliente?

Gracias

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

0

Esto parece un caso en el que Linq traduce la consulta de una manera que no está prediciendo.

Yendo desde la memoria y sin IDE disponible para verificarlo, pero pruébalo. Si primero divide el nombre completo en el espacio, puede usar los valores en su consulta.

 // returns an array based on the patter, if it can be split var names = pattern.Split(" "); // then use the array elements in the query var users = context.User.Where(x => x.FirstName == pattern || x.LastName == pattern || (x.FirstName == names[0] && x.LastName == names[1]));

La última condición OR de la consulta debería evaluar los 2 nuevos elementos en la matriz de nombres, que se creó a partir del patrón.

over 4 years ago · Santiago Trujillo Denunciar

0

Parece un error de MySql.Data.EntityFrameworkCore.

En su lugar, uso Pomelo.EntityFrameworkCore.MySql para resolver el problema.

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