[英]LINQ left outer join with exclusion
我試圖排除第一個查詢的結果被包含在我的第二個查詢的結果中。
SQL等效於此處,其中A是我當前的查詢,B是舊查詢。
我一直在嘗試使用本指南進行左連接,但我似乎無法弄清楚它在我的情況下應該如何工作。 我只是不明白這應該如何工作(我不能讓語法突出顯示為快樂)。
var emp = from employee in empl
join jc in jce on callout.job_class_code_fk equals jc.job_class_code_fk
join av in ab on employee.employee_id_pk equals av.employee_id_fk
join sh in sho on employee.employee_id_pk equals sh.employee_id_fk into lj
from rnd2 in lj.DefaultIfEmpty()
orderby employee.seniority descending
select new
{
eid = employee.employee_id_pk,
sen = employee.seniority,
nam = employee.employee_name,
pho = employee.phone_number,
lje = sho == null ? sho.employee_id_fk : null //left outer join with exclusion??
};
編輯::根據評論中的建議,我嘗試了以下兩種方法。 雖然我不再有語法問題,但以下都沒有返回任何結果,所以這里仍然有問題。
var emp = from employee in empl
join jc in jce on callout.job_class_code_fk equals jc.job_class_code_fk
join av in ab on employee.employee_id_pk equals av.employee_id_fk
join sh in sho on employee.employee_id_pk equals sh.employee_id_fk into lj
from rnd2 in lj.DefaultIfEmpty() where sho == null
orderby employee.seniority descending
select new
{
eid = employee.employee_id_pk,
sen = employee.seniority,
nam = employee.employee_name,
pho = employee.phone_number,
};
var emp = from employee in empl
join jc in jce on callout.job_class_code_fk equals jc.job_class_code_fk
join av in ab on employee.employee_id_pk equals av.employee_id_fk
join sh in sho on employee.employee_id_pk equals sh.employee_id_fk into lj
from rnd2 in lj.DefaultIfEmpty() where rnd2 == null
orderby employee.seniority descending
select new
{
eid = employee.employee_id_pk,
sen = employee.seniority,
nam = employee.employee_name,
pho = employee.phone_number,
};
好吧(對我而言)最容易閱讀和理解的答案最終成為了這個。
創建兩個列表,我要排除的列表和主列表。
他們我們運行master.Except(排除)和瞧。 我們已經完成了左外連接的效果和排除。
這是工作代碼。 上面的解決方案很可能有效,因為第一個列表的組合方式存在另一個問題。
var ex = from employee in empl
join sh in sho on employee.employee_id_pk equals sh.employee_id_fk
select new
{
eid = employee.employee_id_pk,
sen = employee.seniority,
nam = employee.employee_name,
pho = employee.phone_number,
};
ex.Distinct();
//get a list of employees who have the enabled orientations and job classifications
var emp = from employee in empl
join jc in jce on employee.employee_id_pk equals jc.employee_id_fk
join av in ab on employee.employee_id_pk equals av.employee_id_fk
orderby employee.seniority descending
select new
{
eid = employee.employee_id_pk,
sen = employee.seniority,
nam = employee.employee_name,
pho = employee.phone_number,
};
emp = emp.Distinct();
emp = emp.Except(ex);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.