【发布时间】:2025-12-01 18:05:02
【问题描述】:
我有这种情况。我用这个查询调用CreateQuery,我得到了异常。
string sql = "SELECT VALUE CP
FROM CIC_PRODUZIONE_OPERAZIONI_View AS CP
WHERE CP.CD_PLANT = 5
AND CP.CD_POSTI = 10946
AND (CP.FL_STATE IN {N'D',N'N',N'M'})
AND EXISTS (SELECT 1
FROM CIC_OPERAZIONI AS C
WHERE CP.CD_CIC_PRODUZIONE = C.CD_CIC_PRODUZIONE
AND C.CD_POSTI = 10894
AND C.AFCDOPER = (SELECT VALUE TOP (1) D.AFCDOPER FROM CIC_OPERAZIONI AS D
WHERE D.CD_CIC_PRODUZIONE = CP.CD_CIC_PRODUZIONE
AND D.AFCDOPER > CP.AFCDOPER
ORDER BY D.AFCDOPER))
ORDER BY CP.AFCDPROD, CP.FL_STATE, CP.AFESPSAP, CP.AFESPMOD, CP.AFCDOPER";
ObjectQuery<T> entities = CreateQuery<T>(sql);
这是例外:
EntitySqlException:参数类型“Edm.Decimal”和 'Transient.collection[Edm.Decimal(Nullable=True,DefaultValue=,Precision=4,Scale=0)]' 与此操作不兼容。
问题似乎出在我尝试选择 TOP 值时。
有什么建议吗?
编辑
我不明白问题出在表达式的右侧,因为子查询得到一个ICollection<decimal>,而在左侧我有一个小数字段。
...
C.AFCDOPER = (SELECT VALUE TOP (1) D.AFCDOPER FROM CIC_OPERAZIONI AS D
WHERE D.CD_CIC_PRODUZIONE = CP.CD_CIC_PRODUZIONE
AND D.AFCDOPER > CP.AFCDOPER
...
如何获得该集合的“第一个”以避免出现异常?
【问题讨论】:
-
您似乎正在尝试将
decimal属性与ICollection<decimal>属性进行比较,但如果不了解您的模型,则无法判断。 -
字段 AFCDOPER 是 DB 上的 Decimal(4, 0)。在我的 Model.edmx 中是小数
-
问题来了:如何选择ICollection
的第一个元素?
标签: c# wpf entity-framework exception