Null Dapper.net 查询仍然使用 FirstOrDefault() 返回 Null 引用异常
Null Dapper.net query still returning Null Reference Exception with FirstOrDefault()
我想 return 使用 Dapper.net
来自 table 的最大 ID
var x = connection.Query<int>("SELECT max(val) FROM info").FirstOrDefault();
这有效 - 除非不存在行然后我得到一个
Object reference not set to an instance of an object.
当没有记录时,'OrDefault' 不应该表示这个 returns 0 吗?
如何 return 0 - 或一些非空值来防止崩溃。
感谢
问题是您告诉 Dapper 期待 int
的序列,但实际上您有可能得到 null
值。所以你要么需要改变类型
var x = connection.Query<int?>("SELECT max(val) FROM info").Single() ?? 0;
或者您需要更改查询以处理 null
。
var x = connection.Query<int>("SELECT COALESCE(max(val), 0) FROM info").Single();
我在这里使用 Single
因为这个查询应该只 return 恰好一行。
当您需要一个序列并且只需要第一个项目时,或者如果没有项目您需要项目类型的默认值,您可以使用 FirstOrDefault
。
var x = connection.Query<int>("SELECT ISNULL(max(val), 0) FROM info").Single();
如果你想select默认值如果值为null,你可以使用ISNULL。
我想 return 使用 Dapper.net
来自 table 的最大 IDvar x = connection.Query<int>("SELECT max(val) FROM info").FirstOrDefault();
这有效 - 除非不存在行然后我得到一个
Object reference not set to an instance of an object.
当没有记录时,'OrDefault' 不应该表示这个 returns 0 吗?
如何 return 0 - 或一些非空值来防止崩溃。
感谢
问题是您告诉 Dapper 期待 int
的序列,但实际上您有可能得到 null
值。所以你要么需要改变类型
var x = connection.Query<int?>("SELECT max(val) FROM info").Single() ?? 0;
或者您需要更改查询以处理 null
。
var x = connection.Query<int>("SELECT COALESCE(max(val), 0) FROM info").Single();
我在这里使用 Single
因为这个查询应该只 return 恰好一行。
当您需要一个序列并且只需要第一个项目时,或者如果没有项目您需要项目类型的默认值,您可以使用 FirstOrDefault
。
var x = connection.Query<int>("SELECT ISNULL(max(val), 0) FROM info").Single();
如果你想select默认值如果值为null,你可以使用ISNULL。