所以我有一个EmployeeScheduleRoles表,包含ID,EmployeeID,ScheduleID,RoleID
作为注释,RoleID == 1表示您是该计划的管理员(经理)。 我将经理的ID硬编码为15921
现在,我抓住经理有权管理的时间表
var schedList1 = (
from esr in dbcontext.EmployeeScheduleRoles
where esr.EmployeeID == 15921 && esr.RoleID == 1
select esr);
从这里,我抓住这些日程表中的所有员工
var EmployeeScheduleRoles =
(from esr in dbcontext.EmployeeScheduleRoles
join s in schedList1 on esr.ScheduleID equals s.ScheduleID
select esr)
我希望我可以推迟第一个并让它执行第二个。它这样做,但它作为子查询“单独”运行。
我已经尝试过做一些内部联接,但是我迷路了。
期望的输出:
EmployeeID ScheduleID RoleID
15921 1241 1
15927 1241 2
15948 1241 2
15949 1241 2
15950 1241 2
15951 1241 2
15952 1241 2
15953 1241 2
15954 1241 2
15955 1241 2
15956 1241 2
15957 1241 2
15958 1241 2
15959 1241 2
15960 1241 2
15961 1241 2
15962 1241 2
17822 1241 2
18026 1241 2
18027 1241 2
18028 1241 2
在这种特殊情况下,请注意此帐户只有一个时间表(在经理的管辖范围内)
编辑:我想彻底摆脱'schedList1'并将其替换为连接。
以下功能正常,但我想在可能的情况下强制执行此操作,而不是主查询和子查询。
from esr in dbcontext.EmployeeScheduleRoles
join s in
(from esr in dbcontext.EmployeeScheduleRoles
where esr.EmployeeID == 15921 && esr.RoleID == 1
select esr.ScheduleID)
on esr.ScheduleID equals s
select esr)
答案 0 :(得分:1)
听起来你想要这样的东西:
var EmployeeScheduleRoles =
from esrManager in dbcontext.EmployeeScheduleRoles
join esrEmployee in dbContext.EmployeeScheduleRoles on esrEmployee.ScheduleID equals esrManager.ScheduleID
where esrManager.EmployeeID == 15921 && esrManager.RoleID == 1
select new
{
esrEmployee.EmployeeID,
esrEmployee.ScheduleID,
esrEmployee.RoleID
};
您将与其共享相同scheduleId的员工加入经理,因此EmployeeSchduleRoles的出现次数为两次。