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

尝试执行此查询时:


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 }

但是得到上面的错误。


Smart猫小萌
浏览 598回答 3
3回答

呼唤远方

我猜测其中一列的类型可以隐式转换为另一列。可能的是,int和int?。这就是为什么要equals隐式转换并与new { X = 1 }不兼容的原因new { X = (int?)1 }。将冲突的列之一强制转换为int或int?取决于是否可以使用null。例如new { Customer_ID = (int?)pl.Customer_ID, ... }诚然,在这种特殊情况下,编译器错误尚不清楚,并且未指出根本原因。(此答案是从已删除的副本中解救出来的。由于它比当前接受的副本更完整,因此我将其添加。)

holdtom

在原始的LINQ查询中,where子句包含赋值,而不是比较(即需要“ ==”而不是“ =”)。
打开App,查看更多内容
随时随地看视频慕课网APP