0

所以我有一个 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)
4

1 回答 1

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 出现两次。

于 2013-06-28T12:51:15.863 回答