Dapper.net을 사용하여 전체 텍스트 검색 매개 변수 전달

dapper full-text-search sql-server

문제

Keywords 필드에서 전체 텍스트 검색을 사용하는 다음과 같은 간단한 쿼리를 고려하십시오.

DECLARE @searchTerm VARCHAR(500) = 'painted'
SELECT * FROM StockCatalogueItems
WHERE (CONTAINS(KeyWords, @searchTerm))

이 예상대로 작동하지만 Dapper.net 매개 변수화 된 쿼리를 사용하여 동일한 작업을 수행해야합니다. 저장 프로 시저를 사용할 때 "\"painted*\"" 와 같은 전체 텍스트 매개 변수를 만듭니다.

그러나 동일한 접근 방식을 사용하면 위와 같은 방법으로는 더 이상 사용하지 않을 수 있습니다. 결과가 리턴되지 않습니다. 이것은 매개 변수를 사용하는 쿼리의 줄입니다.

AND (CONTAINS(KeyWords, @search)) 

다음과 같이 쿼리에 전달됩니다.

return _context.Database.Connection.Query<StockProfileMatrix>(basequery, new
{
    search = searchTerm
}

나는 어쩌면 따옴표가 어떻게 든 문자열을 살균한다고 가정 할 수 있습니다.

어떤 아이디어?

수락 된 답변

완전을 위해, 나는 그 질문에 답할 것이다. 쿼리 구문은 정확하지만 전체 텍스트 매개 변수가 작성되는 방식은 분명하지 않습니다. 매개 변수의 형식을 지정하는 확장 메서드를 만들었습니다.

 public static string ToFullText(this string str)
 {
      string searchTerm = null;
      if (!string.IsNullOrEmpty(str))
      {
          string[] keywords = str.Trim().Split(null);
          foreach (var keyword in keywords)
          {
             searchTerm += string.Format("\"{0}*\" AND ", keyword);
           }
           if (searchTerm != null)
              searchTerm = searchTerm.Substring(0, searchTerm.LastIndexOf(" AND "));
        }
        return searchTerm;
  }

그런 다음 매개 변수를 dapper 쿼리에 전달할 때이 메서드를 호출합니다.

_context.Database.Connection.Query<dynamic>(query, new 
{ 
    search = filter.SearchTerm.ToFullText()
});

인기 답변

이것은 나를 위해 작동합니다. 그러나 기술 스택은 .net core RTM"Dapper": "1.50.0-rc3" ,

_dbConnection.QueryAsync<Guid>(@"select br.Id from Brand br where CONTAINS(br.Text,@Name)",new {Name = $"\"*{name}*\""}))


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow