【问题标题】:Dapper, SqlBuilder extension and Order By descendingDapper、SqlBuilder 扩展和降序排序
【发布时间】:2020-05-30 23:23:53
【问题描述】:

我正在尝试构建一个简单的查询,该查询使用 Dapper 按降序检索数据。如果这很重要,数据库是 MySql。

这是我使用的代码:

var builder = new SqlBuilder();

var sql = @$"SELECT * FROM table t /**orderby**/ LIMIT @paramSkip, @paramTake";

var template = builder.AddTemplate(sql);

builder.OrderBy("@paramOrderBy DESC", parameters: new
{
    paramOrderBy = orderBy,
});

// Limit
builder.AddParameters(parameters: new
{
    paramSkip = skip,
    paramTake = take
});

return Connection.QueryAsync<TableModel>(
template.RawSql, template.Parameters,
transaction: Transaction
);

这总是按升序返回数据。 DESC 只是被忽略。我尝试在查询中使用 DESC 关键字或作为参数,但结果是一样的。

唯一有效的是将订单参数和 DESC 关键字放入查询本身(通过字符串插值)

(编辑:错别字和文字简化)

【问题讨论】:

    标签: dapper sqlbuilder


    【解决方案1】:

    您的查询需要如下所示:

    ... ORDER BY <Column name> DESC ...
    

    列名无法参数化,因此您需要将其插入到查询中,如下所示:

    builder.OrderBy($"{orderBy} DESC");
    

    如果您的orderBy 以任何方式来自用户,请务必先对其进行清理以防止 SQL 注入。您可以 - 例如 - 保留有效列名的列表并针对它进行验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 2012-11-08
      • 2023-03-07
      • 2016-03-03
      • 1970-01-01
      相关资源
      最近更新 更多