使用 Dapper.net 传递全文搜索参数

Passing a full-text search parameter using Dapper.net

考虑这个在 Keywords 字段上使用全文搜索的简单查询:

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

这按预期工作,但我需要使用 Dapper.net 参数化查询来执行相同的操作。使用存储过程时,我创建了这样的全文参数:"\"painted*\""

但是使用相同的方法,这在使用 dapper 时不起作用。没有返回结果。这是查询中我使用参数的行:

AND (CONTAINS(KeyWords, @search)) 

它像这样传递给查询:

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

我只能假设 dapper 正在以某种方式清理字符串,也许删除引号?

有什么想法吗?

这对我有用。然而,我正在研究的技术堆栈是 .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}*\""}))

为了完整起见,我会回答这个问题。查询语法是正确的,但创建全文参数的方式显然不正确。我创建了一个格式化参数的扩展方法:

 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()
});