Null Dapper.net查询仍然返回带有FirstOrDefault()的Null引用异常

本文关键字:Null FirstOrDefault 异常 引用 net Dapper 查询 返回 | 更新日期: 2023-09-27 18:14:44

我想使用Dapper.net 从表中返回最大Id

var x = connection.Query<int>("SELECT max(val) FROM info").FirstOrDefault();

这是有效的-除非没有行,否则我会得到

对象引用未设置为对象的实例。

"OrDefault"不应该意味着在没有记录的情况下返回0吗?

如何返回0或一些非null值以防止崩溃。

thx

Null Dapper.net查询仍然返回带有FirstOrDefault()的Null引用异常

问题是,您告诉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,因为这个查询应该只返回一行。

当您需要一个序列并且只需要第一个项目时,或者如果没有项目,您需要项目类型的默认值时,可以使用FirstOrDefault

var x = connection.Query<int>("SELECT ISNULL(max(val), 0) FROM info").Single();

如果要在值为null时选择默认值,则可以使用ISNULL。