Фильтр Entity Framework во внутреннем списке - PullRequest
2 голосов
/ 02 декабря 2011

Я использую Entity Framework и у меня есть это отображение сущностей:

Parent
- Child 1 (ActiveInd = "Y")
- Child 2 (ActiveInd = "N")
- Child 3 (ActiveInd = "Y")

Я хочу запрос Linq, похожий на этот (но тот, который будет работать :)

Parent parent = (from p in DataContext.Current.Parents 
where p.ParentId == _parentId 
&& p.Children.Active == true select p).FirstOrDefault();

Должно возвращаться следующее (только активные записи):

Parent
- Child 1 (ActiveInd = "Y")
- Child 3 (ActiveInd = "Y")

1 Ответ

2 голосов
/ 02 декабря 2011

Если вы хотите, чтобы родители имели хотя бы одного активного ребенка:

from p in DataContext.Current.Parents
where p.ParentId == _parentId && p.Children.Any(c => c.Active)
select p

Если вы хотите, чтобы родители были со всеми активными детьми:

from p in DataContext.Current.Parents
where p.ParentId == _parentId && p.Children.All(c => c.Active)
select p

Если вы хотите отфильтровать дочерние элементы как часть одного и того же запроса, вы можете сделать что-то вроде:

from p in DataContext.Current.Parents
where p.ParentId == _parentId 
select new { Parent = p, ActiveChildren = p.Children.Where(c => c.Active) } into parentWithActiveChildren
where parentWithActiveChildren.FilteredChildren.Any()
select parentWithActiveChildren

или

from p in DataContext.Current.Parents
where p.ParentId == _parentId && p.Children.Any(c => c.Active)
select new { Parent = p, ActiveChildren = p.Children.Where(c => c.Active) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...