2016-01-13 73 views
0

我試圖根據用戶所屬的組來拉取所有Institutions和未破壞的InstitutionUsersInstitutionInstitutionUsersInstitutionUsersInvestigatorGroups(一個機構也有團體)。我知道我哪裏有問題,任何的幫助深表感謝使用LINQ Lambda表達式導航屬性的條件

public class InstitutionRepository : IInstitutionRepository 
{ 
    public IEnumerable<Institution> GetInstitutionGroupUsers(IEnumerable<int> groupIds) 
    { 
     using (var context = new GameDbContext()) 
     { 

      return context.Institutions 
       .Include(i => i.InstitutionUsers) 
       .Where(i => i.InstitutionUsers 
        .Select(g => g.IsTrashed) 
         .Contains(false) && groupIds.Contains(i.InstitutionUsers.Select(g => g.InvestigatorGroupUsers.Select(x => x.InvestigatorGroupId)))).ToArray().ToList(); 
     } 
    } 

enter image description here

回答

0

如果我理解正確的,你想獲得具有IsTrashed=false至少一個InstitutionUserInstitution清單,並正在與相關的至少一個InvestigationGroupId包含在通過的groupIds過濾器中。

如果這是真的,那麼下面的查詢應該產生期望的結果

return context.Institutions 
    .Include(i => i.InstitutionUsers) 
    .Where(i => i.InstitutionUsers.Any(u => !u.IsTrashed && 
     u => u.InvestigatorGroupUsers.Any(gu => groupIds.Contains(gu.InvestigatorGroupId)))) 
    .ToList();