73

このクエリを実行しようとしている間:

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' の呼び出しで型の推定に失敗しました。

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 }

しかし、上記のエラーが発生します。

4

4 に答える 4

7

オブジェクトのプロパティ名が同じであることを確認してください。エラーは次のように表示されます。

結合句のいずれかの式の型が正しくありません。'Join' の呼び出しで型参照が失敗しました

これは、 と のように異なる 2 つの値の型がある場合に表示されるメッセージと同じであるため、少し誤解を招く可能性がintありdoubleます。

私の場合、これが実際に意味したことは、値ではなく、2 つのオブジェクト自体が異なる型であったということです。

join count in productCount on new { tool.ItemNo, tool.ItemType } equals new { count.OrigNumber, count.ItemType }

これにより、次のオブジェクトが生成されました。明らかに比較できません。

'a is new { int ItemNo, int ItemType }

'a is new { int OrigNumber, int ItemType }

これを修正するには、OrigNumber フィールドに ItemNo という名前を付けるだけです。

join count in productCount on new { tool.ItemNo, tool.ItemType } equals new { ItemNo = count.OrigNumber, count.ItemType }
于 2019-12-18T12:29:52.850 に答える
3

列の1つに、暗黙的に他の列に変換可能な型があると推測しています。おそらく、intそしてint?。そのため、 はequals暗黙的に変換され、new { X = 1 }と互換性がありませんnew { X = (int?)1 }

null が可能かどうかに応じて、競合する列の 1 つを または にキャストしますintint?例えば

new { Customer_ID = (int?)pl.Customer_ID, ... }

確かに、この特定のケースでのコンパイラ エラーは非常に不明確であり、根本的な原因を示していません。

(この回答は、削除された重複から救出されました。現在受け入れられているものよりも完全であるため、追加します。)

于 2016-06-22T20:25:16.823 に答える