반응형
Dapper는 like 연산자를 지원합니까?
Dapper-dot-net 사용 ...
다음은 데이터 개체에서 결과를 생성하지 않습니다.
var data = conn.Query(@"
select top 25
Term as Label,
Type,
ID
from SearchTerms
WHERE Term like '%@T%'",
new { T = (string)term });
그러나 다음과 같은 일반 문자열 형식을 사용할 때 :
string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term);
var data = conn.Query(QueryString);
컬렉션에서 25 행을 다시 얻습니다. Dapper가 매개 변수의 끝을 올바르게 구문 분석하지 @T
않습니까?
시험:
term = "whateverterm";
var encodeForLike = term => term.Replace("[", "[[]").Replace("%", "[%]");
string term = "%" + encodeForLike(term) + "%";
var data = conn.Query(@"
select top 25
Term as Label,
Type,
ID
from SearchTerms
WHERE Term like @term",
new { term });
같은 연산자에 대해 특별한 것은 없습니다. 문자열 리터럴 안에 매개 변수를 넣는 것을 절대 원하지 않습니다. 작동하지 않고 대신 문자열로 해석됩니다.
노트
두 번째 스 니펫의 하드 코딩 된 예제는 SQL 인젝션에 큰 문제가 될뿐만 아니라 dapper가 누출 될 수 있습니다.
경고
모든 like
와일드 카드로 선도 경기는 느리고 인덱스 스캔이 필요합니다 즉, 스 SARGable 없습니다.
이것을 사용하여 쿼리에 concat 함수를 추가하는 가장 좋은 방법은 SQL 주입에도 저장되지만 concat 함수는 SQL 2012 이상에서만 지원됩니다.
string query = "SELECT * from country WHERE Name LIKE CONCAT('%',@name,'%');"
var results = connection.query<country>(query, new {name});
네 그렇습니다. 이 간단한 솔루션은 매번 저에게 효과적이었습니다.
db.Query<Remitente>("SELECT *
FROM Remitentes
WHERE Nombre LIKE @n", new { n = "%" + nombre + "%" })
.ToList();
Sam의 대답은 나를 위해 작동하지 않았으므로 몇 가지 테스트 후 작동하는 것처럼 보이는 SQLite CONCAT 등가물 을 사용했습니다.
string sql = "SELECT * FROM myTable WHERE Name LIKE '%' || @NAME || '%'";
var data = IEnumerable data = conn.Query(sql, new { NAME = Name });
참조 URL : https://stackoverflow.com/questions/6030099/does-dapper-support-the-like-operator
반응형
'development' 카테고리의 다른 글
sbt / play에 대해 컬러 터미널 출력을 비활성화하려면 어떻게해야합니까? (0) | 2020.12.29 |
---|---|
UITableViewCell 배경색이 작동하지 않는 이유는 무엇입니까 (인터페이스 빌더에서 설정)? (0) | 2020.12.29 |
같은 줄에 인쇄하려면 어떻게해야합니까? (0) | 2020.12.29 |
전역 신규 및 삭제 연산자를 올바르게 대체하는 방법 (0) | 2020.12.29 |
TeamCity Nuget Feed에서 특정 버전의 패키지를 제거하는 방법은 무엇입니까? (0) | 2020.12.29 |