使用SQl Server中的contains关键字从字符串数组构建where子句

时间:2013-03-26 09:33:15

标签: c# sql-server linq

我有一个字符串:

"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的干净解决方案。

3 个答案:

答案 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*\"')"