Dapper Order By

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によって生成されたクエリを表示する方法はありますか?

受け入れられた回答

もちろん、一般的なデータベースエンジンでは、列名をパラメータ化することはできません。したがって、たとえば:

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

order by節をパラメータ化しようとしているときに、エスケープすることが保証されていれば、インライン代入を使用することをお勧めします。ボビーテーブルは常に潜んでいます。 (どちらかまたはあなたがprocを使うことができる)

私は(MySQLの?Oracleの)プロファイラーの周りの状況についてはわかりませんが、SQLを見るためにMiniProfilerのようなツールを使うことができます。

キャッシュには影響しますが、影響が最小限になるように、sortOrderとsortDirectionの順列はわずかです。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ