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

542
Vistas
¿Cómo especificar dónde y seleccionar en una consulta que contiene ThenInclude, cuando cualquiera de los elementos where/select no está presente en el contexto de la consulta?

tengo 3 mesas:

Contrato, materia y pretensiones. Cada tabla tiene una relación 1:N con la siguiente tabla.

Quiero seleccionar el nombre del reclamo donde contract con_name = 'C109K'

 var claims = await _context.Claims.AsNoTracking() .Include(cl=>cl.Matter) .ThenInclude(mat=>mat.Contract) .Where(con=>con.con_name=='C109K') .Select(cl=>new{name=cl.cl_name})

El error es que la cláusula where no puede encontrar con_name porque el contexto es reclamaciones.

También probé al revés, es decir, comenzando la consulta desde el contrato. Pero en ese caso, la selección no puede obtener el nombre del reclamo ya que el contexto de la consulta es el contrato.

¿Cómo puedo escribir correctamente esta consulta?

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

0

Es difícil estar seguro sin el modelo, pero supongo que esto debería funcionar:

 var claims = await _context.Claims.AsNoTracking() .Include(cl=>cl.Matter) .ThenInclude(mat=>mat.Contract) .Where(cl=>cl.Matter.Contract.con_name=='C109K') // <-- find the contract associated with the claim .Select(cl=>new{name=cl.cl_name})

Los métodos .Include( .Include() y .ThenInclude() se utilizan para cargar las entidades relacionadas (consulte la documentación sobre carga ansiosa ). Le piden a EF Core que recupere los datos de la base de datos y los cargue en las entidades asociadas.

Por ejemplo en tu caso:

 var claim = (await _context.Claims.AsNoTracking()).First(); var matter = claim.Matter; // matter will always be null, because it was no loaded claim = (await _context.Claims.Include(cl=>cl.Matter).AsNoTracking()).First(); matter = claim.Matter; // the claim's matter is loaded thanks to the Include call var contract = matter.Contract; // contract is null because it was not loaded claim = (await _context.Claims.Include(cl=>cl.Matter).ThenInclude(mat=>mat.Contract).AsNoTracking()).First(); matter = claim.Matter; // the claim's matter is loaded thanks to the Include call contract = matter.Contract; // contract is loaded thanks to the ThenInclude call

Esos métodos permiten un control granular sobre qué datos se recuperan de su base de datos: en algún momento no necesita todos los datos, solo la vista de nivel superior.

Sin embargo, en su caso, esas llamadas no son necesarias porque no recupera las entidades vinculadas: solo las necesita para filtrar, y el filtrado se realiza únicamente mediante la ejecución de la consulta SQL adecuada.

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