Oto problem: Muszę zwrócić kolekcję obiektów z przefiltrowanymi zbiorami zagnieżdżonymi. E.g: istnieje sklep z zamówieniami i muszę zwrócić kolekcję ze sklepami zawierającą kolekcje zagnieżdżone z zamówieniami, ale bez zamówień od klientów oznaczonych jako usunięte.Jak filtrować zagnieżdżone obiekty Entity Framework?
Oto, co próbuję zrobić. Ale wciąż nie ma szczęścia. Wszelkie sugestie są odpowiednie :)
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;
}
Problem polega na tym, że filtr nie jest stosowany. Klienci, którzy usunęli flagę ustawioną jako prawdziwa, pozostają w kolekcji.
Co to jest problem? Czy to nie kompiluje? Czy rzuci wyjątek środowiska wykonawczego?Czy działa, ale zwraca nieprawidłowe dane? –
wyjaśniłem trochę więcej. dzięki. –
Skończyło się na tym pakiecie nuget: 'Z.EntityFramework.Plus.QueryIncludeFilter.EF6' Dokumentacja tutaj: https://github.com/zzzprojects/EntityFramework-Plus/wiki/EF-Query-IncludeFilter-%7C-Entity- Framework-Include-Entity-Entity-using-Where-Filter –