[英]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.