2012-02-18 58 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