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

nii*_*ico 6 c# linq dapper

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

var x = connection.Query<int>("SELECT max(val) FROM info").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

这是有效的 - 除非没有行然后我得到一个

你调用的对象是空的.

不应该'OrDefault'意味着当没有记录时它会返回0吗?

如何返回0 - 或一些非空值以防止崩溃.

谢谢

juh*_*arr 10

问题是你告诉Dapper期望一系列的int,但你实际上有可能的null价值.所以你要么改变类型

var x = connection.Query<int?>("SELECT max(val) FROM info").Single() ?? 0;
Run Code Online (Sandbox Code Playgroud)

或者您需要更改查询以处理null.

var x = connection.Query<int>("SELECT COALESCE(max(val), 0) FROM info").Single();
Run Code Online (Sandbox Code Playgroud)

我在Single这里使用,因为这个查询应该只返回一行.

您可以FirstOrDefault在期望序列时使用,只需要第一个项目,或者如果没有项目,则需要项目类型的默认值.