Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

544
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!