Я пытаюсь отфильтровать три дочерних уровня вниз и найти только дочерние элементы, в которых PropertyMailingAddress.Status == True.
Как преобразовать фильтр на три уровня вниз и провести вложенную фильтрацию с EntityFrameworkPlus IncludeFilter? Каков наиболее эффективный способ?
Структура классов вложена следующим образом:
- Property
- PropertyParty
- Party
- PartyMailingAddress
- PropertyMailingAddress <--- Статус должен быть равен true (все узлы PropertyMailingAddress внуков со статусом Status == False должны быть удалены из этой вложенной ветви внуков, оставьте узлы PropertyMailingAddress, которые имеют значение True) </strong>
Этот оригинальный способ не работает:
var result = await db.Property.Include(pm => pm.PropertyParty)
.Include(pm => pm.PropertyParty)
.ThenInclude(x => x.Party)
.ThenInclude(x => x.PartyMailingAddress)
.ThenInclude(x => x.PropertyMailingAddress)
.Where(a => a.PropertyParty.Any(x => (x.Party.PartyMailingAddress.Any(z => z.PropertyMailingAddress.Any(h => h.Status == true))))).ToListAsync();
Попытка эффективного способа с Entity Framework Plus: нужно ли повторно соединить последнюю строку с вложенными вышеупомянутыми местами, или ниже штраф?
var result = await db.Property.Include(pm => pm.PropertyParty)
.Include(pm => pm.PropertyParty)
.ThenInclude(x => x.Party)
.ThenInclude(x => x.PartyMailingAddress)
.ThenInclude(x => x.PropertyMailingAddress)
.IncludeFilter(y => y.PropertyMailingAddress.Where(z => z.Status == true)).ToListAsync();
* Нам потребуются все вложенные сущности при фильтрации,
В настоящее время используется Net Core 2.2