簡體   English   中英

EF查詢來自多個表的條件

[英]EF query with conditions from multiple tables

我有一個名為“雇員”的表。 該表中的employeeId可以在另一個名為“ Tasks”的表(多對多聯接)中。 “任務”表中的另一個字段是鏈接到“ TaskDetails”表的taskId。 該表包括諸如budgetHours之類的詳細信息。

使用EF4,如何編寫WHERE語句,以便將退貨分配給budgetHours> 120小時的任務?

下面的WHERE語句限制了Employees表中的行,但是現在我需要在TaskDetails表上添加條件。

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

謝謝!

如果員工具有名為“任務”的導航屬性,請嘗試以下操作:

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

如果您的表格結構如下所示,

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)

假設您在Employee實體上具有Tasks導航屬性,這應該很簡單:

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

當然,這需要在此時解析Tasks屬性,或者通過延遲加載或使用.Include()顯式解析。

(對@adrift表示感謝,以使Tasks.Any()正確...糟糕。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM