我有一个字符串:
"bottle 750 green"
字符串每次都有可变数量的单词。我需要,根据这个字符串来创建:
CONTAINS(descr_en,'"*bottle*" and "*750*" and "*green*"')
然后我会将它附加到sql语句的where子句中,以获得所需的结果。
如何创建生成的contains子句?
我试过这个:
var str = "mara 750 bottle";
string[] strarr = str.Split(' ');
var result = "";
foreach (var s in strarr)
{
result += "\"*" + s + "*\"" + " AND ";
}
这给了我:"*mara*" AND "*750*" AND "*bottle*" AND
这几乎是我所需要的。
我唯一需要的就是摆脱训练“和”......
如果可能的话,我更喜欢基于LINQ的干净解决方案。
答案 0 :(得分:3)
string.Join(" AND ", "mara 750 bottle".Split(' ').Select (s => string.Format("\"*{0}*\"", s)))
给出"*mara*" AND "*750*" AND "*bottle*"
答案 1 :(得分:0)
/ *为什么不根据以下内容构建CONTAINS子句:
//This is not literally suitable.
foreach( string s in samplestring.Split(' '))
{
yourstringbuilder.append(" and *");
yourstringbuilder.append(s);
yourstringbuilder.append("*");
}
?* /
编辑:对于您编辑过的问题 - 在循环后只需result = result.remove(result.Length - " AND ".Length);
答案 2 :(得分:0)
这是一个相当干净的方法。
public string BuildContainsClause(string filter)
{
var keywords = filter
.Split(' ')
.Select(e => string.Format("\"*{0}*\"", e));
return string.Format("CONTAINS(descr_en,'{0}')", string.Join(" AND ", keywords));
}
用法:
var contains = BuildContainsClause("bottle 750 green");
// contains = "CONTAINS(descr_en,'\"*bottle*\" AND \"*750*\" AND \"*green*\"')"