Dapper Order By

dapper sql-order-by

Pregunta

¿Hay alguna razón por la cual el siguiente código no se recuperaría en el orden correcto al usar 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
                       });

Siempre regresa sin aplicar el orden.

Podría simplemente colocar sortOrder y sortDirection directamente en la cadena como esta

"SELECT id, name " +
"FROM user " +
"ORDER BY " + sortOrder + " " + sortDirection + " " +
"LIMIT @offset, @pageSize; "

pero no estoy seguro de cómo eso afectará a Dapper ya que creo que tiene su propio almacenamiento en caché de plan de consulta .

Además, ¿hay alguna manera de ver la consulta generada por Dapper?

Respuesta aceptada

Claro, en general los motores de bases de datos no le permiten parametrizar nombres de columna. Así por ejemplo:

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

Cuando intente parametrizar orden por cláusulas, le recomendaría usar la sustitución en línea, siempre que pueda garantizar su escapada, bobby tables siempre acecha. (O eso o podrías usar un proc)

No estoy seguro de la situación en torno a los perfiles de (MySQL? Oracle?) Pero podría utilizar una herramienta como MiniProfiler para ver el SQL.

Afectará el almacenamiento en caché, sin embargo, solo hay un pequeño número de permutaciones de sortOrder y sortDirection por lo que el impacto es mínimo.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué