2012-07-23 60 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