テーブルをルックアップテーブルに結合したままにするデータベースのクエリを書き込もうとしていて、結果がcaseステートメントに基づいて返されます。EFケースステートメントと組み合わせた2つのプロパティのテーブルへの結合を残しました
通常のSQLでクエリは次のようになります。
SELECT chis_id, chis_detail, cilt.mhcatID, cilt.mhtID, 'TheFileName' =
CASE
WHEN cilt.mhcatID IS NOT NULL AND cilt.mhtID IS NOT NULL THEN chis_linked_filename
END
FROM chis
LEFT JOIN cilt on cilt.mhcatID = chis.mhcat_id AND cilt.mhtID = chis.mht_id
WHERE cch_id = 50
chis
テーブルが照会され、cilt
は、ルックアップテーブルで、(CHIS結果としてCHISへの外部キー関係が含まれていませんmhtIDとmhcatIDでそれぞれmhtテーブルとmhcatテーブルに既存のFKを持っています)。
このクエリは、レコードの履歴更新のリストを返すために使用されます。 ciltルックアップテーブルへの結合が成功した場合、これは、クエリの呼び出し元に、履歴更新のための関連ファイルのファイル名を表示する権限があることを意味します。
私の研究の中で、ケースステートメントを実行する方法と、Linqのエンティティクエリへの結合を放棄する方法に関するさまざまな記事がありましたが、2つの異なるフィールドにどのように参加するかを検討することができませんでした。これは可能ですか?
は、任意のパフォーマンスの問題や「から」を使用してソリューションを匿名より悪い/良いだろう理由があります型メソッド? – GrandMasterFlush
@ GrandMasterFlush - 私の経験から、生成されたSQLは両方のメソッドで同じなので、どのオプションを簡単に見つけるかを選択します。 – Aducci
私は結果をチェックしていますが、これは内部結合としてデータベースに渡され、左結合ではありません。次のクエリを簡素化しても、まだ内部結合として処理されています。 var query = context.chisのxから context.ciltsのYに結合します。new {MHT = x.mht_id}はnew {MHT = y.mhtID} x.cch_id == 50 select x.chis_id; – GrandMasterFlush