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

时间:2016-03-22 16:36:44

标签: sql-server full-text-search dapper

考虑使用DECLARE @searchTerm VARCHAR(500) = 'painted' SELECT * FROM StockCatalogueItems WHERE (CONTAINS(KeyWords, @searchTerm)) 字段上的全文搜索的简单查询:

"\"painted*\""

这可以按预期工作,但我需要使用Dapper.net参数化查询来执行相同的操作。使用存储过程时,我创建了如下所示的全文参数:AND (CONTAINS(KeyWords, @search))

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

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

并将其传递给查询,如下所示:

    tbgiris.Text = Convert.ToString(Session["giris"]);
    tbmail.Text = Convert.ToString(Session["mail"]);
    tbisim.Text = Convert.ToString(Session["isim"]);
    tbgrup.Text = Convert.ToString(Session["grup"]);
    tbkimlik.Text = Convert.ToString(Session["kimlik"]);
    tbadmin.Text = Convert.ToString(Session["admin"]);

我只能假设小巧玲珑正在以某种方式消毒字符串,或许删除引号?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

vec3

然后,当我将参数传递给dapper查询时,我调用该方法:

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