2010-11-29 71 views
2

我有一個名爲「員工」表。該表中的employeeId可能位於另一個名爲「Tasks」的表(名爲「多對多連接」)中。 「任務」表中的其他字段是一個鏈接到「TaskDetails」表的taskId。此表格包含諸如budgetHours的詳細信息。與條件EF查詢從多個表

使用EF4,我怎麼寫WHERE語句使得復位分配給其中budgetHours是>120小時任務的員工?

的WHERE在僱員表中的下列限制行,但現在我需要添加的TaskDetails表的條件語句。

var assocOrg = Employees.Where(x => x.EmployeeTypeID == 2 && x.DepartmentName == "ABC").Select (x => x.EmployeeID); 

謝謝!

回答

4

如果員工有一個名爲任務導航屬性,試試這個:

var assocOrg = Employees.Where(x => x.EmployeeTypeID == 2 && 
            x.DepartmentName == "ABC" && 
            x.Tasks.Any(t => t.BudgetHours > 120)) 
         .Select (x => x.EmployeeID); 
+0

+1 - 每個LINQ開發者都應該知道「Any」。 – RPM1984 2010-11-29 21:18:25

0

假設你對Employee實體Tasks導航屬性,這應該是簡單的:

var assocOrg = Employees.Where(x => x.Tasks.Any(t => t.BudgetHours > 120) && x.DepartmentName == "ABC").Select (x => x.EmployeeID); 

當然,這需要任務屬性在這一點上得到解決,無論是明確的,通過延遲加載,或.Include()

(榮譽給@adrift用於獲取Tasks.Any()右...哎呀。)

1

如果表內在張力結構是如下,

TableName   Employee Task    TaskDetails 
ReferenceKeys  EmpID  EmpdID/TaskID  TaskID/BudgetHours 

再使用,

Employee.Where(x => x.Task.EmpID == x.EmpID && x.Task.TaskDetails.TaskID == x.Task.TaskID && x.Task.TaskDetails.BudgetHours > 120).select(x => x.EmpID)