如何使用 dapper 获取第一个子值(通常查询 count(*) 作为唯一结果)

How to get the first child value using dapper (typically querying count(*) as the only result)

我想实现这样的功能:

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 具有 ExecuteScalar[<T>],如果您正在阅读一栏、一行、一个网格,则可以使用它。所以:

var name = connection.ExecuteScalar<string>("select 'abc'");
int count = connection.ExecuteScalar<int>("select 123");

对于所有常见的 "sort of one row, multiple columns" 场景,还有 Query{First|Single}[OrDefault][<T>]

关于你的 API 的警告:任何 接受字符串 sql (并且没有单独的参数)的东西让我非常紧张您将导致 sql 注入问题。