2012-07-23 94 views
0

请不要给我在兰巴如何执行此Linq-to-Sql连接?

I have two tables. 
Employees: 
pk   
name   

ExpenseTeamMembers: 
pk       
expMgrPk 
empPk 

Example: pk  expMgrPk  empPk  
    1   7   81 
    2   7   101 
    3   13   99 
    4   13   22 
    5   13   56 

基本上第一表是员工列表,第二个是用于跟踪表,其员工属于哪个经理帮助。

第一个sql查找工作和mgr让我在组合框中选定名称的pk。

我想在连接中做什么是查找expMgrPk并查看哪些员工属于它并返回他们的名称而不是他们的PK。我很漂亮,需要一点帮助。再次请不要给我帮助兰巴!由于

private void cboManagers_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (cboManagers != null) 
     { 
      string selectedMgr = (string)cboManagers.SelectedValue; 

      using (DataClasses1DataContext db = new DataClasses1DataContext()) 
      { 
       int mgr = (from f in db.employees 
          where f.name == selectedMgr 
          select f.pk).FirstOrDefault(); 

       var emps = (from m in db.employees 
          join t in db.expenseTeamMembers on m.pk equals t.pK 
          where t.expMgrPk == mgr 
          select m.name).ToList(); 
       lstSelected.DataSource = emps; 
      } 
     } 
    } 
+4

如果你的关系设置正确,你不应该直接处理PK。 – 2012-07-23 01:03:54

+0

你的加入应该是'm.pk等于t.empPk'。另外,我没有在winforms中工作,但是你不能在列表框中存储一个值和文本吗?这样你就可以避免'mgr'查询,并简单地将列表框选定的值传递给'emps'查询。 – 2012-07-23 01:12:54

+0

所选管理器是组合框而不是列表框。我解决了我的问题,但仍然无法正常工作。我认为我错过了一条线... – 2012-07-23 01:24:14

回答

1

在LINQ到SQL,您可以编写方法是写两个from语句与where联合声明更容易连接。事情是这样的:

var emps = (from f in db.employees 
      from m in db.expenseTeamMembers 
      where m.pk == mgr && f.pk == m.empPk 
      select f.name).ToList(); 

我发现这种语法更容易,当你的代码被编译,查询被转换成传统的T-SQL连接。

+0

尝试过,这...不去... var emps =(来自db.employees中的m from db.expenseTeamMembers 其中t.pK == mgr && m.pk == t.empPk select m.name).ToList(); – 2012-07-23 02:00:48

+1

我想通过暂时用一个已知的经理pk替换变量mgr来调试你的查询,看看会发生什么。代码的语法是正确的,所以问题在别处。你有错误还是查询不返回任何内容? – frenchie 2012-07-23 02:04:02

+0

它返回0条记录。没有错误 – 2012-07-23 02:08:32