Заказать Dapper

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
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему