繁体   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