也许我没有正确地做某事,但我需要创建一个字符串列表来过滤一些 SQLSELECT
查询,我能找到的只是转义单个参数值的答案。
给定这个数组:
string[] domains = new string[] { "sec", "krn", "op", "ip" };
我需要创建这个查询
SELECT * FROM user_domains WHERE name IN ("sec", "krn", "op", "ip")
注意:这不是一个真正的查询,但说明了这个问题的重点。
一个天真的解决方案是创建一个查询
SELECT * FROM user_domains WHERE name IN (@p1, @p2, @p3, @p4)
并使用格式化为的参数执行查询
Dictionary<string,string> inTerms = domains
.Select((t, i) => new { Key = "p" + i, Term = t })
.ToDictionary(item => item.Key, item => item.Term,
StringComparer.OrdinalIgnoreCase);
还有另一种方法吗?
更新
使用逗号或以其他方式分隔的术语字符串执行简单的字符串比较(aka )是否同样容易和快速?index of
前任:
SELECT * FROM user_domains WHERE CHARINDEX(name, @terms) > 0