このクエリを実行しようとしている間:
var query = from dpr in ctx.DPR_MM
join q in ctx.QOT on dpr.DPR_QOT_ID equals qot_id
join p in ctx.PAY_MM on new { q.QOT_SEC_ID, dpr.DPR_TS } equals new { p.PAY_SEC_ID, p.PAY_DATE }
where q.QOT_ID = qot_id
select new
{
dpr.dpr_ts,
dpr.dpr_close,
pay.First().pay_dividend
};
私はこのエラーを受け取っています:
結合句の式のいずれかのタイプが正しくありません。 「推論」の呼び出しで型推論が失敗しました。
QOT_SEC_ID
はdecimal
およびPAY_SEC_ID
はタイプint32
。テーブルで変更することはできません。
何をしても、モデルのプロパティを変更することはできません。私はこのようなタイプを変換しようとしました:
join p in ctx.PAY on new { sec_id = (Int32)(q.QOT_SEC_ID), dpr.DPR_TS } equals new { sec_id = (Int32)p.PAY_SEC_ID, p.PAY_DATE }
しかし、上記のエラーが発生します。
タイプand匿名タイプのプロパティの名前は一致する必要があります。
new { p1 = q.QOT_SEC_ID, p2 = dpr.DPR_TS }
equals
new { p1 = (decimal)p.PAY_SEC_ID, p2 = p.PAY_DATE }
またはp.PAY_SEC_ID
はint?
:
new { p1 = (int?)q.QOT_SEC_ID, p2 = dpr.DPR_TS }
equals
new { p1 = p.PAY_SEC_ID, p2 = p.PAY_DATE }
列の1つが暗黙的に他の列に変換可能な型を持っていると推測しています。おそらく、int
および_int?
_。 equals
が暗黙的に変換し、_new { X = 1 }
_がnew { X = (int?)1 }
と互換性がないのはそのためです。
NULLが可能かどうかに応じて、競合する列の1つをint
または_int?
_にキャストします。例えば。
_new { Customer_ID = (int?)pl.Customer_ID, ... }
_
確かに、この特定の場合のコンパイラエラーは非常に不明確であり、根本的な原因を示していません。
(この答えは、削除された複製から救われました。現在受け入れられているものよりも完全なので、追加します。)
元のLINQクエリでは、where句に比較ではなく割り当てが含まれています(つまり、「=」ではなく「==」が必要です)。