Il tipo di una delle espressioni nella clausola join non è corretto in Entity Framework

Durante il tentativo di eseguire questa query:

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

Sto ottenendo questo errore:

Il tipo di una delle espressioni nella clausola join non è corretto. Digitare l’inferenza non riuscita nella chiamata a “Partecipa”.

QOT_SEC_ID è di tipo decimal e PAY_SEC_ID è di tipo int32 . Non ho il permesso di cambiarlo sul tavolo.

Non importa cosa faccio, non sono in grado di cambiarlo nelle proprietà del modello. Ho provato a convertire i tipi in questo modo:

 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 } 

ma ottenendo l’errore sopra.

I tipi e i nomi delle proprietà nei tipi anonimi devono corrispondere:

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

o se p.PAY_SEC_ID erano un int? :

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

Nella query LINQ originale, la clausola where contiene l’assegnazione, non il confronto (ad esempio, è necessario “==” anziché “=”).

Suppongo che una delle colonne abbia un tipo che è implicitamente convertibile nell’altra. Probabilmente, int e int? . Ecco perché equals conversioni implicite e new { X = 1 } è incompatibile con new { X = (int?)1 } .

Trasmetti una delle colonne in conflitto a int o int? a seconda che i valori nulli siano possibili o meno. Per esempio

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

Certo, l’errore del compilatore in questo caso particolare non è chiaro e non punta alla causa principale.

(Questa risposta è stata salvata da un duplicato eliminato. Poiché è più completa di quella attualmente accettata, la aggiungerò.)