gpt4 book ai didi

c# - LINQ to SQL 和空值

转载 作者:太空狗 更新时间:2023-10-29 23:09:21 25 4
gpt4 key购买 nike

我有以下 LINQ to SQL 查询:

var inTransitStocks = orderHistories.Where(oh => oh.Shipped_Qty > 0)
.Select(oh => oh.Shipped_Qty); //.ToList();
var inTransitStock = (int)inTransitStocks.Sum();

如果没有 ToList 调用,我会在 Sum() 行得到以下异常:

The null value cannot be assigned to a member with type System.Double which is a non-nullable value type.

如果我在 sum 之前添加 .ToList()(如评论中所示),我不会收到错误。

为什么我一开始会收到错误消息?(Shipped_Qty 不为 null 且数据库中该字段中不存在 null 数据)

为什么添加 ToList() 是一个修复?


执行的sql查询如下(查询比上面多):

SELECT [t0].[Shipped Qty]
FROM [dbo].[Order History] AS [t0]
WHERE ([t0].[Shipped Qty] > @p0) AND ([t0].[CUST_ID] = @p1) AND ([t0].[SHIP_TO_ID] = @p2) AND ([t0].[Item] = @p3) AND (([t0].[DT_LST_SHP] >= @p4) OR (UNICODE([t0].[LN_STA]) = @p5))

没有返回结果。

最佳答案

原因如下:

如果没有 ToList,将对数据库执行以下查询:

select SUM(Shipped_Qty) from orderHistories where Shipped_Qty > 0;

如果没有符合此条件的行,则此查询的结果不是 0,而是 NULL

使用 ToList 执行以下查询:

select Shipped_Qty from orderHistories where Shipped_Qty > 0;

结果(无行)将放入列表中。结果是一个空列表。在该空列表上执行 LINQ to Objects 扩展方法 Sum。空列表的总和为 0 而不是 null

所以基本上:不同的语义会导致不同的结果。

关于c# - LINQ to SQL 和空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12276431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com