Dapper Order By

dapper sql-order-by

Question

Y a-t-il une raison pour laquelle le code suivant ne serait pas récupéré dans le bon ordre lors de l'utilisation de 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
                       });

Il retourne toujours sans appliquer la commande.

Je pourrais simplement placer le sortOrder et la direction de tri directement dans la chaîne comme ceci

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

mais je ne suis pas sûr de savoir comment cela affectera dapper, car je pense qu'il a son propre cache de plan de requête .

En outre, existe-t-il un moyen d'afficher la requête générée par dapper?

Réponse acceptée

Bien sûr, en général, les moteurs de bases de données ne vous permettent pas de paramétrer les noms de colonnes. Donc par exemple:

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

Lorsque vous essayez de paramétrer des clauses d’ordre, je vous recommande d’utiliser la substitution en ligne, à condition que vous puissiez vous assurer que vos tables de bobby sont toujours cachées. (Soit ça ou vous pourriez utiliser un proc)

Je ne suis pas sûr de la situation concernant les profileurs pour (MySQL? Oracle?) Mais vous pouvez utiliser un outil comme MiniProfiler pour voir le SQL.

Cela affectera la mise en cache, mais il y a seulement un petit nombre de permutations de sortOrder et de sortDirection, donc l'impact est minime.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi