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의 오라클?)에 대한 프로파일 러 주변 상황에 대해 잘 모르겠지만 MiniProfiler 같은 도구를 사용하여 SQL을 볼 수 있습니다.

캐싱에는 영향을 미치지 만, sortOrder 및 sortDirection의 순열이 적어 영향이 미미합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.