为了账号安全,请及时绑定邮箱和手机立即绑定

join子句中表达式之一的类型在Entity Framework中不正确

join子句中表达式之一的类型在Entity Framework中不正确

C#
Smart猫小萌 2019-11-04 09:23:58
尝试执行此查询时: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是类型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 }但是得到上面的错误。
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

我猜测其中一列的类型可以隐式转换为另一列。可能的是,int和int?。这就是为什么要equals隐式转换并与new { X = 1 }不兼容的原因new { X = (int?)1 }。


将冲突的列之一强制转换为int或int?取决于是否可以使用null。例如


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

诚然,在这种特殊情况下,编译器错误尚不清楚,并且未指出根本原因。


(此答案是从已删除的副本中解救出来的。由于它比当前接受的副本更完整,因此我将其添加。)


查看完整回答
反对 回复 2019-11-04
?
holdtom

TA贡献1805条经验 获得超10个赞

在原始的LINQ查询中,where子句包含赋值,而不是比较(即需要“ ==”而不是“ =”)。


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 597 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信