【问题标题】:EntitySqlException on CreateQuery and type mismatchCreateQuery 上的 EntitySqlException 和类型不匹配
【发布时间】: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&lt;decimal&gt;,而在左侧我有一个小数字段。

...

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&lt;decimal&gt; 属性进行比较,但如果不了解您的模型,则无法判断。
  • 字段 AFCDOPER 是 DB 上的 Decimal(4, 0)。在我的 Model.edmx 中是小数
  • 问题来了:如何选择ICollection的第一个元素?

标签: c# wpf entity-framework exception


【解决方案1】:

你试过了吗?

Select Top(1) D.AFCDOPER   FROM CIC_OPERAZIONI AS D

我认为这将在没有世界“VALUE”的情况下工作。

【讨论】:

  • 没有。不幸的是,我遇到了同样的异常
  • 你能给我们五个你的架构吗?所以我可以试试??
  • 我想我理解这个问题。子查询返回一个 ICollection 并且在左侧我有一个小数。此时我必须找到如何重写该查询
  • 好的...干得好最好的问候
最近更新 更多