LINQ SUM方法错误



以下 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;}
}

注意

  1. SQL Server 2012中相应订单表的Payo列是类型real,其所有值大于零(如果很重要)
  2. 出于测试目的,在上述查询中,如果我替换选择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(); 
}

相关内容

最新更新