2

私は次のような文字列を持っています:

"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これはほとんど私が必要としているものです。

上記から必要なのは、トレーニング「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 に答える