Aquí está el problema: Necesito devolver una colección de objetos con colecciones anidadas filtradas. E.g: hay una tienda con pedidos y necesito devolver una colección con tiendas que incluye colecciones anidadas con pedidos pero sin pedidos de clientes marcados como eliminados.Cómo filtrar objetos de Entity Framework de colección anidada?
Esto es lo que trato de hacer. Pero todavía no hay suerte. Cualquier sugerencia se aplica :)
public List<StoreEntity> GetStores(Func<Store, bool> storeFilter, Predicate<OrderEntity> orderFileter)
{
IQueryable<StoreEntity> storeEntities = Context.Stores
.Include(o => o.Order)
.Include(cu => cu.Orders.Select(c => c.Customer))
.Where(storeFilter)
//.Where(rcu=>rcu.Orders.Select(cu=>cu.Customer.Deleted==false)) //just test this doesn't work
.AsQueryable();
List<StoreEntity> storeEntities = storeEntities.ToList();
//storeEntities.ForEach(s => s.Orders.ToList().RemoveAll(c=>c.Customer.Deleted==true)); // doesn't work
foreach (StoreEntity storeEntity in storeEntities)
{
storeEntity.Orders.ToList().RemoveAll(r=>r.Customer.Deleted==true);
}
return storeEntities;
}
El problema es que el filtro no se aplica. Los clientes que han eliminado el marcador establecido como verdadero permanecen en la colección.
¿Y cuál es el problema? ¿No compila? ¿Lanza una excepción de tiempo de ejecución?¿Se ejecuta pero devuelve los datos incorrectos? –
explicó un poco más. Gracias. –
Terminé usando este paquete nuget: 'Z.EntityFramework.Plus.QueryIncludeFilter.EF6' Documentación aquí: https://github.com/zzzprojects/EntityFramework-Plus/wiki/EF-Query-IncludeFilter-%7C-Entity- Framework-Include-Related-Entities-using-Where-Filter –