結合されたテーブルの列が変数と等しいか、変数が null である列を照合することにより、LINQ を使用してテーブルを結合しようとしています (その時点で、結合はそのフィールドではなくまだ発生する必要があります)。
私のLINQは次のようなものです:
var data = (
from lt in cxt.CmsPageRow
join page in cxt.CmsPage on new { lt.CmsPageID, cmsSiteID.Value } equals new { page.CmsPageID, page.CmsSiteID }
...
cmsSiteID は null 許容の INT です。
「'Join' の呼び出しで型の推論に失敗しました」と不平を言っているため、コードをコンパイルできません。
その上、cmsSiteID が null でない場合にのみ、page.CmsSiteID に参加する必要があります。cmsSiteID が null の場合でも、lt.CmsPageID での結合が必要です。
* 編集 *
質問がちょっと変わりました。LINQ の結合で WHERE 句を使用することで、必要なことを実行できます。
join page in cxt.CmsPage.Where(p=>(cmsSiteID==0||p.CmsSiteID==cmsSiteID)) on lt.CmsPageID equals page.CmsPageID
ただし、これはまだ低速です。渡されたパラメーターをリテラルに変更すると、即座に実行されます。
スローランナー
(@p__linq__1 = 0 OR [Extent2].[CmsSiteID] = @p__linq__1)
速いランナー
(267 = 0 OR [Extent2].[CmsSiteID] = 267)
これをスピードアップする方法はありますか?