Tengo la tabla Item (Principal) y la tabla ItemAlt (Sub (Lista)) Quiero obtener todas las filas alternativas de elementos donde:
ItemAlt.WarehouseId es igual al parámetro warehouseId
Item.Id es igual al parámetro itemId
public async Task<Item> GetItemWithAlt(int itemId, int warehouseId) { var query = from i in _dbContext.Item.Include(a => a.ItemAlt.Where(c => c.WarehouseId == warehouseId && c.IsActive == true)) where i.IsActive.Equals(true) && i.Id.Equals(itemId) select i; return await query.SingleOrDefaultAsync(); }el problema es que arroja la excepción " La expresión lambda utilizada dentro de Incluir no es válida " en
.Where(c => c.WarehouseId == warehouseId && c.IsActive == true)¿Sabes cómo solucionar este problema?
Las inclusiones filtradas solo están disponibles desde EF Core 5.0, como indican los documentos :
Esta función se introdujo en EF Core 5.0.
Por lo tanto, debe actualizar su proyecto a las versiones correspondientes de .NET y EF Core o reescribir la consulta para unirse manualmente con ItemAlt filtrado.
O intente seleccionar el tipo anónimo y confíe en la corrección de la relación. Algo así (no probado):
var result = await _dbContext.Item .Where(i => i.IsActive.Equals(true) && i.Id.Equals(itemId)) .Select(i => new { Item = i, ItemAlts = i.ItemAlt .Where(c => c.WarehouseId == warehouseId && c.IsActive == true)) .ToList() } .SingleOrDefaultAsync(); return result?.Item;