Oracleでは正しく動作する外部結合が残っていますが、LINQに変換すると機能しません。 LINQを介して実行すると、ユーザーのためにLINQ左外側結合が機能しない(例を含む)
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を返すSQL
T_PER_ADDL_ATRB
に存在しないレコードを検索するので、私は何のレコードを取得していない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レコードを返します
DefaultIfEmpty()
と
がに特別な何かをしていませんあなたのSQLを変換するには、 'WHERE A22.ADDL_ATRB_ID = 22'は基本的に' LEFT OUTER JOIN'を殺すべきです。参加する前にその条件を追加してみてください。 'A22をdb.T_PER_ADDL_ATRB.Where(A22 => A22.ADDL_ATRB_ID == 22)'に入れ、 'Where'節から削除します。 –
SQLはChenで検索していますが、LinqはKonyayevを使用しています。 – juharr