我已经离开了外部联接,它在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