MaM*_*aMu 54 c# linq linq-to-entities entity-framework join
在尝试执行此查询时:
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
};
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
join子句中某个表达式的类型不正确.调用"加入"时类型推断失败.
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 }
Run Code Online (Sandbox Code Playgroud)
但得到上面的错误.
Ger*_*old 130
匿名类型中属性的类型和名称必须匹配:
new { p1 = q.QOT_SEC_ID, p2 = dpr.DPR_TS }
equals
new { p1 = (decimal)p.PAY_SEC_ID, p2 = p.PAY_DATE }
Run Code Online (Sandbox Code Playgroud)
或者如果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 }
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助我刚刚遇到类似面部表情的人,确保对象的属性名称相同。错误显示为:
join 子句中的表达式之一的类型不正确。调用“加入”时类型引用失败
这有点误导,因为这与当您有两个不同的值类型 ieint和时出现的消息相同double。
在我的情况下,这实际上意味着两个对象本身是不同的类型,而不是值:
join count in productCount on new { tool.ItemNo, tool.ItemType } equals new { count.OrigNumber, count.ItemType }
Run Code Online (Sandbox Code Playgroud)
这正在生成以下对象;这显然没有可比性。
'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 }
Run Code Online (Sandbox Code Playgroud)