'QueryFirstOrDefault<T>' 和 'ExecuteScalar<T>' 有什么区别?

What's the difference between 'QueryFirstOrDefault<T>' and 'ExecuteScalar<T>'?

在Dapper中,QueryFirstOrDefault<T>ExecuteScalar<T>的用法有什么区别?

两者似乎 return 一个单一值,尽管 QueryFirstOrDefault<T> 将 return 类型的默认值,如果找到 none。由于性能或其他原因,您是否应该始终更喜欢使用两者之一,或者它们是否等效,而忽略默认值 returned?

Scalar 预计 SQL 脚本只会返回一行; QueryFirstOrDefault 不关心返回了多少行。

我认为(现在无法检查)如果返回零行,Scalar 可能会抛出错误(感谢@Tim 在多个结果上纠正我)。

我会说偏好取决于您编写的脚本的预期功能。

主要区别在于 return:

ExecuteScalar<T>,正如其他用户所说,returns 只有结果集的第一个单元格

  • ExecuteScalar<T> 的 return 类型是泛型 <T>,它会自动将结果转换为您在 <T>
  • 上指定的类型

QueryFirstOrDefault<T> 执行查询并 returns 您在 <T>:

上指定的数据类型
  • 如果指定的类型是基本类型(string、int 等...),它仅 returns 第一列的数据。

  • 如果指定的类型是对象,则为结果集的每一行创建该对象的一个​​实例。请注意以下事实:假定直接列名===成员名映射并且不能使用自定义映射器,因此如果您的对象具有与结果集,将不会获取任何值。