2012-02-18 62 views
4

当使用dapper时,下面的代码不会以正确的顺序被检索出来吗?Dapper Order By

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生成的查询?

回答

6

当然,通常数据库引擎不允许你参数化列名。因此,例如:

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

当你试图通过条款,以参数化为了我会建议使用内联替代,只要你能保证你的逃逸,鲍比表总是如影随行。 (或者你或者你可以使用一个proc)

我不确定关于(MySQL?Oracle?)探查器的情况,但是你可以使用像MiniProfiler这样的工具来查看SQL。

它会影响缓存,但sortOrder和sortDirection只有少量的排列,所以影响很小。

+0

非常感谢您的快速响应! – JesseBuesking 2012-02-20 01:53:07