我正在尝试构建一个使用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关键字或as参数,但结果相同。
唯一起作用的是在查询本身中放入顺序参数和DESC关键字(通过字符串插值)
(编辑:拼写错误和文本简化)
发布于 2020-06-03 20:52:40
你需要你的查询看起来像这样:
... ORDER BY <Column name> DESC ...列名不能参数化,因此您需要将其插入到查询中,如下所示:
builder.OrderBy($"{orderBy} DESC");如果您的orderBy以任何方式源自用户,请确保首先对其进行清理,以防止SQL注入。例如,您可以保留一个有效列名的列表,并根据它进行验证。
https://stackoverflow.com/questions/62109835
复制相似问题