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