c# - left - El tipo de una de las expresiones en la cláusula join es incorrecto en Entity Framework
join() linq c# (3)
En la consulta LINQ original, la cláusula where contiene asignación, no comparación (es decir, necesita "==" en lugar de "=").
Al intentar ejecutar esta consulta:
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
};
Me aparece este error:
El tipo de una de las expresiones en la cláusula join es incorrecto. La inferencia de tipo falló en la llamada a ''Unirse''.
QOT_SEC_ID
es de tipo decimal
y PAY_SEC_ID
es de tipo int32
. No puedo cambiarlo en la tabla.
No importa lo que haga, no puedo cambiarlo en las propiedades del modelo. He intentado convertir los tipos como este:
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 }
pero obteniendo el error anterior
Los tipos y los nombres de las propiedades en los tipos anónimos deben coincidir:
new { p1 = q.QOT_SEC_ID, p2 = dpr.DPR_TS }
equals
new { p1 = (decimal)p.PAY_SEC_ID, p2 = p.PAY_DATE }
o si p.PAY_SEC_ID
fuera un int?
:
new { p1 = (int?)q.QOT_SEC_ID, p2 = dpr.DPR_TS }
equals
new { p1 = p.PAY_SEC_ID, p2 = p.PAY_DATE }
Supongo que una de las columnas tiene un tipo que es implícitamente convertible a la otra. Probable, int
y int?
. Es por eso que equals
convierte implícitamente y el new { X = 1 }
es incompatible con el new { X = (int?)1 }
.
¿Lanza una de las columnas conflictivas a int
o int?
dependiendo de si los nulos son posibles o no. P.ej
new { Customer_ID = (int?)pl.Customer_ID, ... }
Es cierto que el error del compilador en este caso particular no está del todo claro y no apunta a la causa raíz.
(Esta respuesta fue rescatada de un duplicado eliminado. Como es más completa que la actualmente aceptada, la agregaré).