1. ホーム
  2. c#

Entity Frameworkで、join句の式の1つの型が正しくありません。

2023-12-10 21:14:57

質問

このクエリを実行しようとしているとき。

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
            };

こんなエラーが出ています。

join 節の式の 1 つの型が正しくありません。 Join'の呼び出しで型推論に失敗しました。

QOT_SEC_ID は、タイプ decimalPAY_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 }

と入力しても、上記のようなエラーになります。

どのように解決するのですか?

種類 は、無名型のプロパティの名前が一致しなければなりません。

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_IDint? :

new { p1 = (int?)q.QOT_SEC_ID, p2 = dpr.DPR_TS } 
    equals 
new { p1 = p.PAY_SEC_ID, p2 = p.PAY_DATE }

...これはマッチしない PAY_SEC_IDnull であり、または

new { p1 = q.QOT_SEC_ID, p2 = dpr.DPR_TS } 
    equals 
new { p1 = p.PAY_SEC_ID.GetValueOrDefault(), p2 = p.PAY_DATE }

...これはデフォルトで p1 から 0 いつ PAY_SEC_IDnull となり、やはり一致しません(ID値が決して 0 ).