2

我有一个像这样的字符串:

"bottle 750 green"

该字符串每次都有可变数量的单词。我需要,基于这个字符串来创建:

CONTAINS(descr_en,'"*bottle*" and "*750*" and "*green*"')

然后,我会将其附加到 sql 语句的 where 子句中,以获得所需的结果。

如何创建生成的包含子句?

我试过这个:

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

4

3 回答 3

3
string.Join(" AND ", "mara 750 bottle".Split(' ').Select (s => string.Format("\"*{0}*\"", s)))

"*mara*" AND "*750*" AND "*bottle*"

于 2013-03-26T09:54:19.617 回答
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);在您的循环之后

于 2013-03-26T09:48:20.150 回答
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*\"')"
于 2013-03-26T09:54:10.303 回答