以下 LINQ
查询给我以下错误:
错误:
无法将'system.double'的对象施放到type'system.nullable'1 [system.single]'。
LINQ查询:
using (gEn myEntities = new gEn)
{
var load = (from items in myEntities.Orders
select items.PayO).Sum();
}
模型:
Public class Order
{
Public int OrdersId {get; set;}
Public float? PayO {get; set;}
}
注意:
- SQL Server 2012中相应订单表的Payo列是类型
real
,其所有值大于零(如果很重要) - 出于测试目的,在上述查询中,如果我替换选择itects.payo by,例如,
select 2
LINQ
查询工作正常,并返回2个重复的总和,则与行数一样多倍在桌子中。例如,如果表有4行,则LINQ
查询将返回8
(即2 2 2 2)
我怀疑(目前无法证明)您是否有查询物质化的问题!
执行此查询时:
var load = (from items in myEntities.Orders
select items.PayO).Sum();
它将转换为此查询:
SELECT SUM(PayO) FROM Order;
此时,您的查询无法处理null
值!
但是,当您这样做时(我在上面的评论中提到):
var pays = (from items in myEntities.Orders select items.PayO).ToList();
您的查询将被执行,您将拥有float?
的内存列表。此时,您可以执行聚合,因为Sum()
能够处理null
值。
var load = pays.Sum();
load
是您的总和。
从我在代码中看到的内容。Payo是无效的,错误清楚地表明它不能将null转换为两倍。因此,您需要更新查询,例如
using (gEn myEntities = new gEn)
{
var load = (from items in myEntities.Orders
where items.PayO != NULL
select items.PayO).Sum();
}