如何使用 dapper 获取第一个子值(通常查询 count(*) 作为唯一结果)
Posted
技术标签:
【中文标题】如何使用 dapper 获取第一个子值(通常查询 count(*) 作为唯一结果)【英文标题】:How to get the first child value using dapper (typically querying count(*) as the only result) 【发布时间】:2016-03-21 06:02:32 【问题描述】:我想实现一些这样的功能:
public static string GetResult(string sql)
// TODO:
// result = connection.Query(....);
// return result.FirstRow().FirstChild().ToString();
然后这样调用:
string myName = GetResult("SELECT userName from tb_Users WHERE ID = 1");
// or
int totalRows = Convert.ToInt32(GetResult("SELECT count(*) FROM tb_List"));
如何使用 Dapper 实现 TODO 部分?
【问题讨论】:
这完全取决于你告诉Dapper
对象类型是什么。 First()
会给你第一行。如果你告诉Dapper
对象类型是string
,你应该可以简单地返回Query<string>(sql).First();
。另外 - 在结果上运行 ToString()
然后将其解析回键入的值是自找麻烦。
@Rob 帮了我很多忙!
【参考方案1】:
Dapper 有ExecuteScalar[<T>]
,如果您正在阅读一列、一行、一个网格,可以使用它。所以:
var name = connection.ExecuteScalar<string>("select 'abc'");
int count = connection.ExecuteScalar<int>("select 123");
还有QueryFirst|Single[OrDefault][<T>]
用于所有常见的“单行多列排序”场景。
请注意您的 API:仅 接受 sql 字符串(且没有单独的参数)的任何内容都让我非常担心您将导致 sql 注入问题。
【讨论】:
感谢您的谨慎,我上面的代码只是为了让您易于阅读的示例:P以上是关于如何使用 dapper 获取第一个子值(通常查询 count(*) 作为唯一结果)的主要内容,如果未能解决你的问题,请参考以下文章