C# 防止实体框架强制转换

C# 防止实体框架强制转换,c#,sql,entity-framework,linq,entity-framework-core,C#,Sql,Entity Framework,Linq,Entity Framework Core,我有一个查询正在进行如下分组: from order in orders group by new { CustomerID = order.CustomerID, Year = order.OrderDate.Year, Month = order.OrderDate.Month } into g select new { Total = g.Sum(x => x.Quantity * x.UnitPrice } 我得

我有一个查询正在进行如下分组:

from order in orders group by 
   new { CustomerID = order.CustomerID, 
         Year = order.OrderDate.Year, 
         Month = order.OrderDate.Month } into g 
   select new {
      Total = g.Sum(x => x.Quantity * x.UnitPrice }
我得到一个错误:

算术溢出

我查看了生成的SQL,它试图将
Quantity
从int转换为decimal,因为
UnitPrice
是decimal。在SQL中,如果我不执行强制转换,查询可以正常工作


我如何强制EF不将
数量
转换为十进制,这样它就不会抛出异常?

如果有人得到相同的算术溢出转换异常,下面是答案。关键是将
decimal
值转换为
double
,因此生成的SQL将两者转换为float(奇怪但有效)

之所以会发生这种情况,是因为sql是从c#表达式树中删除的,十进制和整数相乘转换为在c#中向上转换整数到十进制,因为*采用了两个相同类型的参数,这解释了结果sql试图将数量转换为十进制,要解决此问题,需要手动转换,希望这能帮助其他人面对同样的问题:

from order in orders group by 
    new { CustomerID= order.CustomerID, 
    Year= order.OrderDate.Year, 
    Month= order.OrderDate.Month } into g 
    select new {
        Total= g.Sum(x=>x.Quanitty * (double)x.UnitPrice
        }

如果有人得到相同的算术溢出强制转换异常,下面是答案。关键是将
decimal
值转换为
double
,因此生成的SQL将两者转换为float(奇怪但有效)

之所以会发生这种情况,是因为sql是从c#表达式树中删除的,十进制和整数相乘转换为在c#中向上转换整数到十进制,因为*采用了两个相同类型的参数,这解释了结果sql试图将数量转换为十进制,要解决此问题,需要手动转换,希望这能帮助其他人面对同样的问题:

from order in orders group by 
    new { CustomerID= order.CustomerID, 
    Year= order.OrderDate.Year, 
    Month= order.OrderDate.Month } into g 
    select new {
        Total= g.Sum(x=>x.Quanitty * (double)x.UnitPrice
        }

在C#中把单价定为双倍怎么样?(接受舍入误差)。导致溢出的数量和价格是多少?我怀疑还有其他错误,比如一个值为null。它在@user2864740运行,我已经在这方面做了一段时间了,在c#中将其转换为双精度,使sql生成将数量和佣金转换为“浮点数”finally@Ahmed如果成功了,你已经找到了解决方案,那么就在这里发布答案。这对其他人会有帮助。我感谢@user2864740给出的答案,但由于他将其作为评论,我无法将其标记为已回答,因此我将发布答案。将单价转换为C#中的双倍怎么样?(接受舍入误差)。导致溢出的数量和价格是多少?我怀疑还有其他错误,比如一个值为null。它在@user2864740运行,我已经在这方面做了一段时间了,在c#中将其转换为双精度,使sql生成将数量和佣金转换为“浮点数”finally@Ahmed如果成功了,你已经找到了解决方案,那么就在这里发布答案。我感谢@user2864740给出的答案,但由于他将其作为评论,我无法将其标记为已回答,因此我将发布答案