Tengo un procedimiento que me devuelve los identificadores de entidad que necesito.
(Decido crear este procedimiento, ya que las entidades que deben ser retenidas al usuario final, son filtradas por entidades relacionadas, pero el núcleo no admite el filtrado por entidades relacionadas).
Luego quiero usar estos identificadores para obtener entidades que necesito, entidades relacionadas con ellas.
Estoy usando el operador "Any". En mi opinión, debería generar una consulta como esta: "WHERE id IN (1,2,3,4 ....)" pero parece que no funciona como quiero.
En su lugar, devuelve una advertencia con la información de que "Cualquier cláusula no se pudo traducir y se evaluará localmente"
¿Cómo podría arreglarlo?
Yo código a continuación:
var assocsIds = await _context.Assoc.AsNoTracking()
.FromSql($"exec {SqlProcedures.GetAssocsForIndexProc} {query.IndexMviId}, {query.FilterByGroupId}")
.ToListAsync()
var productAssocs = await _context.Assoc
.Where(x => assocsIds.Any(z => z.Id == x.Id))
.Include(x => x.Attribute)
.ThenInclude(x => x.Translation)
.Include(x => x.Option)
.ThenInclude(x => x.Translation)
.Include(x => x.Mvi)
.ThenInclude(x => x.Translation)
.AsNoTracking()
.ToListAsync()
;
¿Puede primero seleccionar "Id" de assocsIds en otra variable y luego probar lo siguiente?
var productAssocs = await _context.Assoc
.Where(x => yourIdsList.Contains(x.Id))
.Include(x => x.Attribute)
.ThenInclude(x => x.Translation)
.Include(x => x.Option)
.ThenInclude(x => x.Translation)
.Include(x => x.Mvi)
.ThenInclude(x => x.Translation)
.AsNoTracking()
.ToListAsync();