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。