Я хочу, чтобы Parent
и его единственные активные Children
и активные Grand Children
использовали Entityframework Plus
отношения
Родитель -> Дети -> Внуки
var parent = await _dbContext.Parent
.IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true))
.IncludeFilter(p=>p.Children.Select(c=>c.GrandChildren.Where(gc=>gc.IsActive ==true)))
.Where(p=>p.ParnetID == 1234)
.SingleOrDefaultAsync()
Вышеуказанный запрос не работает. Дети не фильтруются. Возвращает всех детей, включая неактивных детей. Однако GrandChildren фильтруется (однако я предполагаю, что Grand Childeren фильтруются в памяти, а не в SQL)
Вы также должны включить фильтр для детей во второй раз, когда вы используете IncludeFilter
, в противном случае вы IncludeFilter
детей без фильтра.
var parent = await _dbContext.Parent
.IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true))
.IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true).Select(c=>c.GrandChildren.Where(gc=>gc.IsActive ==true)))
.Where(p=>p.ParnetID == 1234)
.SingleOrDefaultAsync()
Это то, что я в конечном итоге использовал. Это создает 3 SQL заявления
var parent = await _dbContext.Parent
.IncludeFilter(p=>p.Children.Where(c=>c.IsActive == true).Select(c=>c.GrandChildren.Where(gc=>gc.IsActive ==true)))
.Where(p=>p.ParnetID == 1234)
.SingleOrDefaultAsync()