首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dapper、SqlBuilder扩展和按降序排序

Dapper、SqlBuilder扩展和按降序排序
EN

Stack Overflow用户
提问于 2020-05-31 07:23:53
回答 1查看 1.3K关注 0票数 1

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

这是我使用的代码:

代码语言:javascript
复制
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关键字(通过字符串插值)

(编辑:拼写错误和文本简化)

EN

回答 1

Stack Overflow用户

发布于 2020-06-03 20:52:40

你需要你的查询看起来像这样:

代码语言:javascript
复制
... ORDER BY <Column name> DESC ...

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

代码语言:javascript
复制
builder.OrderBy($"{orderBy} DESC");

如果您的orderBy以任何方式源自用户,请确保首先对其进行清理,以防止SQL注入。例如,您可以保留一个有效列名的列表,并根据它进行验证。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62109835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档