我想使用Dapper.net
从表中返回最大IDvar x = connection.Query<int>("SELECT max(val) FROM info").FirstOrDefault();
这有效 - 除非不存在行,否则我会得到
对象引用未设置为对象的实例。
不应该是OrDefault&#39;是否在没有记录时返回0?
如何返回0 - 或某些非空值以防止崩溃。
THX
答案 0 :(得分:9)
问题在于,您告诉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
。
答案 1 :(得分:2)
var x = connection.Query<int>("SELECT ISNULL(max(val), 0) FROM info").Single();
如果要在值为null时选择默认值,则可以使用ISNULL。