2013-06-28 43 views
0

所以我有一个EmployeeScheduleRoles表,包含ID,雇员,ScheduleID,角色ID需要将此子查询更改为连接? (LINQ/T-SQL/EF)

作为一个说明,角色ID == 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

你可以通过结合给定的查询给出确切的输出吗?在桌上的队友 – Manish

+0

它现在在那里。 – statue

回答

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的因此appearence两次加入的经理。

+0

关闭,但请参阅编辑。我想摆脱schedList1,因为这是调用一个单独的(子)查询 – statue

+0

不知道你是什么意思。在我的例子中没有子查询。 – jlew

+0

我打电话给这个实体框架。 EF将schedList1查询延迟到调用'main'查询的时间,但是我想让这一切都完成。 – statue