sql-order-by - Dapper订购者

标签 sql-order-by dapper

使用dapper时,是否有任何原因导致无法按正确的顺序检索以下代码?

connection.Query<User>("SELECT id, name " +
                       "FROM user " +
                       "ORDER BY @sort @dir " +
                       "LIMIT @offset, @pageSize; ",
                       new {
                           sort = sortOrder, // sortOrder = "name"
                           dir = sortDirection, // sortDirection = "ASC"
                           offset = pageIndex * pageSize, // offset = 0
                           pageSize = pageSize // pageSize = 10
                       });

它总是在不应用命令的情况下返回。

我可以像这样直接将sortOrder和sortDirection放入字符串中
"SELECT id, name " +
"FROM user " +
"ORDER BY " + sortOrder + " " + sortDirection + " " +
"LIMIT @offset, @pageSize; "

但我不确定这会如何影响dapper,因为我相信它具有自己的查询计划缓存。

另外,有没有一种方法可以查看由dapper生成的查询?

最佳答案

当然,一般而言,数据库引擎不允许您对列名称进行参数化。因此,例如:

var row = cnn.Query("select @bob as col from table", new {bob = "col"}).first(); 
// most likely returns "row.col == col"

当您试图对by by子句进行参数设置时,如果可以保证转义,bobby表始终潜伏,我建议使用内联替换。 (要么,要么您可以使用proc)

我不确定用于(MySQL?Oracle?)探查器的情况,但是您可以使用MiniProfiler之类的工具来查看SQL。

它会影响缓存,但是sortOrder和sortDirection的排列数量很少,因此影响很小。

关于sql-order-by - Dapper订购者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344340/

相关文章:

c# - dapper 应该使用 "using"语句吗?

c# - 执行 IDbConnection.Query 给出异常 : Conversion failed when converting the nvarchar value 'Memory to data type int'

sql - 表中的隐式 ORDER BY 顺序

SQL - 如何在一个查询中对不同列进行排序

python - sqlite3 排序需要时间

c# - 使用 Dapper Extensions,可以在插入 IEnumerable<T> 时检索 ID

c# - 将 dapper.net 的存储过程输出转换为列表

c# - 从 Azure 函数调用存储过程时, 'System.Data.SqlClient.TdsParser' 的类型初始值设定项引发异常错误

mysql - 通过给出错误将三个表与组连接起来

cursor - 带有 "order by"子句的 PostgreSQL CURSOR