2013-02-20 52 views
4

我有层次结构,其中部门包含团队和团队包含委托。我想要做的是获得一个给定部门下的代表名单。我试图这样做:Linq其中在条款

var teams = from tms in db.Teams 
      where tms.DepartmentID == DepartmentID 
      select tms; 

var TeamDelegates = from tds in db.J_TeamDelegates 
        where tds.TeamID in teams.TeamID //error here 
        select tds; 

但团队集合不允许您引用特定的属性,就好像它是一个集合。我想说的是“在团队集合中选择TeamIDs的所有代表”。

回答

7
var TeamDelegates = from tds in db.J_TeamDelegates 
        where teams.Any(x => x.TeamID == tds.TeamID) 
        select tds; 
+0

虽然这直接回答这个问题,我认为这是值得一提的是我表达它(有两个'SelectMany'呼叫)的方法是要简单得多。 – 2013-02-20 18:11:53

1
var TeamDelegates = db.Teams 
       .Where(tms => tms.DepartmentID == DepartmentID) 
       .SelectMany(tms => db.J_TeamDelegates 
             .Where(tds => tds.TeamID == tms.TeamID)) 
2

我想你可以在这里使用一个连接。

var TeamDelegates = from tms in db.Teams 
        where tms.DepartmentID == DepartmentID 
        join tds in db.J_TeamDelegates on tms.TeamID equals tds.TeamID 
        select tds; 
1
var delegates = db.Departments 
    .Where(department => department.ID == 123) 
    .SelectMany(department => department.Teams) 
    .SelectMany(team => team.Delegates);