我正在尝试为多个搜索词构建动态 Sql 查询。我一般了解如何使用构建器,但不确定在循环中做什么,因为我实际上需要 @term 每次都不同(我认为)。不仅在查询中,而且在匿名类型中也进行匹配。
我可以在查询字符串中使用 string.Format,但不确定如何在匿名类型中匹配它?
public async Task<List<Thing>> Search(params string[] searchTerms)
{
var builder = new SqlBuilder();
var template = builder.AddTemplate("SELECT * /**select**/ from ThingTags /**where**/ ");
for (int i = 0; i < searchTerms.Length; i++)
{
builder.OrWhere("value LIKE @term", new { term = "%" + searchTerms[i] + "%" });
}
...
}
在当前表单中,为术语“abc”“def”“ghi”创建的查询是
CommandType: Text, CommandText: SELECT * from ThingTags WHERE ( value LIKE @term OR value LIKE @term OR value LIKE @term )
Parameters:
Name: term, Value: %ghi%
这是构建查询的一种方法。我最初没有意识到参数可以是字典。
public async Task<List<Thing>> Search(params string[] searchTerms)
{
var builder = new SqlBuilder();
var template = builder.AddTemplate("SELECT * /**select**/ from ThingTags /**where**/ ");
for (int i = 0; i < searchTerms.Length; i++)
{
var args = new Dictionary<string, object>();
var termId = string.Format("term{0}", i.ToString());
args.Add(termId, "%" + searchTerms[i] + "%");
builder.OrWhere("value LIKE @" + termId, args);
}
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)