2013-06-28 77 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