我已經離開了外部聯接,它在Oracle中正常工作,但在轉換爲LINQ時無法工作。當通過LINQ執行我沒有得到任何記錄,因爲用戶搜索記錄中T_PER_ADDL_ATRBLINQ左外部聯接不工作(使用示例)
SQL
SELECT P.*
FROM T_PER P
INNER JOIN T_PER_CMN_ATRB C ON C.PER_ID = P.PER_ID
LEFT OUTER JOIN T_PER_ADDL_ATRB A22 ON A22.PER_CMN_ATRB_ID = C.PER_CMN_ATRB_ID
WHERE A22.ADDL_ATRB_ID = 22
AND (C.PER_LST_NM LIKE 'Chen%' or A22.ADDL_ATRB_VAL like 'Chen%');
SQL返回不存在1記錄
LINQ
(from P in db.T_PER
join C in db.T_PER_CMN_ATRB on P.PER_ID equals C.PER_ID
join A22 in db.T_PER_ADDL_ATRB on C.PER_CMN_ATRB_ID equals A22.PER_CMN_ATRB_ID into A22_join
from A22 in A22_join.DefaultIfEmpty()
where
A22.ADDL_ATRB_ID == 22 &&
(C.PER_LST_NM.StartsWith("Chen") ||
A22.ADDL_ATRB_VAL.StartsWith("Chen"))
select P).ToList()
LINQ返回0條記錄
只要甲骨文沒有做一些特別的東西轉換你的SQL,WHERE A22.ADDL_ATRB_ID = 22'基本上應該殺死'LEFT OUTER JOIN'。嘗試在連接之前添加該條件,例如'在db.T_PER_ADDL_ATRB.Where(A22 => A22.ADDL_ATRB_ID == 22)中加入A22'並將其從'Where'子句中移除。 –
您的SQL正在搜索Chen,但您的Linq正在使用Konyayev。 – juharr