2012-06-25 5 views
0

Это должно быть просто, но я не продвигаюсь по этой проблеме. Я хочу написать оператор LINQ, который возвращает человека, соответствующего данному идентификатору, и включает в себя набор посещений. Это я могу сделать. Теперь мне нужно включить только активные посещения, то есть включать посещение, только если флаг IsActive является истинным. Мой запрос приведен ниже. Что я делаю не так?Как использовать условие .Where() с .Include()?

var inmate = this.db.Inmates.Where(p => p.Id == id).Include(p => p.Visits.Where(v => v.IsActive)).FirstOrDefault(); 

Update # 1 - Я также попытался это заявление:

var inmate = this.db.Inmates.Include(p => p.Visits).Where(p => p.Id == id && p.Visits.Any(v => v.IsActive)).FirstOrDefault(); 
+0

Вы видели этот вопрос SO http://stackoverflow.com/questions/1680863/linq-include-with-where-clause? –

+1

Я считаю, что вы пытаетесь сделать условную загрузку, когда, когда вы получаете доступ к inmateObject.Visits, вам нужен только список активных посещений. Это уже обсуждается здесь; http://stackoverflow.com/questions/3718400/conditional-eager-loading –

+0

@prashantht Я согласен. Я действительно не думаю, что есть какой-то способ сделать это, кроме как они предложили в вашей ссылке. –

ответ

0

Попробуйте это:

var inmate = this.db.Inmates.Where(i => i.Visits.Any(x => x.IsActive)) 

Примечание: что код предполагает, что IEnumerable<Visits> является свойством Inmate объекта ,

Смежные вопросы