小巧玲瓏

dapper sql-order-by

使用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"

當你試圖通過子句參數化順序時,我建議你使用內聯替換,只要你能保證你的轉義,bobby表總是潛伏著。 (或者你可以使用proc)

我不確定(MySQL?Oracle?)的分析器周圍的情況,但你可以使用像MiniProfiler這樣的工具來查看SQL。

它會影響緩存,但sortOrder和sortDirection只有少量排列,因此影響很小。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因