c# - Null Dapper.net 查询仍然使用 FirstOrDefault() 返回 Null Reference Exception

标签 c# linq dapper nullreferenceexception

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

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

这行得通 - 除非不存在行,否则我会得到一个

Object reference not set to an instance of an object.

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

如何返回 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 因为这个查询应该只返回一行。

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

关于c# - Null Dapper.net 查询仍然使用 FirstOrDefault() 返回 Null Reference Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40239217/

相关文章:

c# - 从同一应用程序中的控制台获取所有行

c# - 基于多级角色授权的数据库设计

c# - 运行 OData v4 客户端代码生成器时出现转换错误

C# Linq select object in List where int in object child List<int> 出现 n 次

c# - Ef如何生成Sql

.net - LINQ有哪些巧妙的用法?

c# - 无法在 "Portuguese"数据库上使用 npgsql 选择某些行

c# - Dapper 可以批处理一组存储过程调用吗?

c# - 如何将表值参数传递给 .NET Core 中的 Dapper?

c# - 从 Span<byte> 获取 Int32