考虑使用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"]);
我只能假设小巧玲珑正在以某种方式消毒字符串,或许删除引号?
有什么想法吗?
答案 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;
}