2015-05-03 5 views
1

У меня есть этот код C#, который работает, но я бы хотел, чтобы у меня было возможность выбрать Агентство, если в нем все включено. Есть ли способ сделать это в запросе?EF6 Состояние на основе дочернего элемента

 var retVal = new List<Agency>(); 
     var items=_db.Agencies 
       .Include(x => x.AgencyMembers.Select(y => y.Person)) 
       .Where(w => w.NationId == User.NationId).ToList(); 

     foreach (var agency in items) 
     { 
      if(agency.AgencyMembers.Any(c=>c.Person.Id==personId)) 
       retVal.Add(agency); 
     } 
     return retVal; 

ответ

2

Вы должны уметь просто добавить этот предикат к вашему запросу.

 return _db.Agencies 
     .Include(x => x.AgencyMembers.Select(y => y.Person)) 
     .Where(w => w.NationId == User.NationId) 
     .Where(agency => agency.AgencyMembers.Any(c=>c.Person.Id==personId)) 
     .ToList(); 

В зависимости от того, какие свойства навигации у вас есть, вы можете упростить его, начиная с человека.

return _db.People 
     .Single(p => p.Id == personId) 
     .Agencies 
     .Where(w => w.NationId == User.NationId) 
     .ToList(); 
1

Вы можете попробовать это:

var items=_db.Agencies 
       .Include(x => x.AgencyMembers.Select(y => y.Person)) 
       .Where(agency=> agency.NationId == User.NationId && agency.AgencyMembers.Any(c=>c.Person.Id==personId)) 
       .ToList(); 
Смежные вопросы