2012-05-05 89 views
0

我有一個員工表,我目前正在用該表中的名稱填充組合框。我還有一個名爲expenseHdr的相關表,其中包含員工pk。我的表結構是這樣的:Linq2sql加入查詢以顯示名稱列表,但只顯示在另一個表中有記錄的列表

employees  expenseHdr 
empPk   expPk 
name   expenseType 
       empPk 

現在它被過濾的名字,但它是爲重複它在expenseHdr每條記錄的名稱。我怎樣才能讓它只顯示一次每個名字?謝謝!

var emps = (from emp in db.employees 
         join exp in db.expenseHdrs on emp.pk equals exp.empPk 
         where emp.active == true 
         orderby emp.name 
         select emp.name.Substring(0, 20)).ToList(); 
      cboEmployee.DataSource = emps; 

回答

2

您可以使用Any()

var emps = (from emp in db.employees 
         where emp.active && emp.expenseHdrs.Any() 
         orderby emp.name 
         select emp.name.Substring(0, 20)).ToList(); 
      cboEmployee.DataSource = emps; 

如果在表之間沒有關係分貝,你反而會寫:

where emp.active && db.expenseHdrs.Any(exp => emp.pk == exp.empPk) 
+0

其中emp.active && db.expenseHdrs.Any(EXP => emp.pk == exp.empPk)這將不使用lambda? –

+1

emp.active &&(from x in db.expenseHdrs where x.pk == exp.empPk select x).Any() –

+2

有時候lambda更短更優雅,這就是其中之一。使用lambda來代替,它更短,更易讀 –

相關問題