1

私は次のようなことをするlinqクエリを使用しています:

viewModel.REGISTRATIONGRPS = (From a In db.TABLEA
    Select New SubViewModel With {
    .SOMEVALUE1 = a.SOMEVALUE1,
    ...
    ...
    .SOMEVALUE2 = If(commaseparatedstring.Contains(a.SOMEVALUE1), True, False)
    }).ToList()

今私の問題は、これが単語を検索するのではなく、部分文字列を検索することです。たとえば:

コンマ区切り文字列 = "EWM,KI,KP" SOMEVALUE1 = "EW"

EWM に含まれているため、true を返しますか?

私が必要とするのは、コンマ区切りの文字列で単語 (部分文字列を含まない) を見つけることです!

4

3 に答える 3

2

オプション 1: 正規表現

Regex.IsMatch(commaseparatedstring, @"\b" + Regex.Escape(a.SOMEVALUE1) + @"\b")

この\b部分は「単語境界」と呼ばれ、「完全な単語」を探していることを正規表現エンジンに伝えます。これRegex.Escape(...)により、一致させようとしているテキスト内の「特殊文字」を正規表現エンジンが解釈しようとしなくなります。たとえば、 を一致させようとすると"one+two"Regex.Escapeメソッドは を返し"one\+two"ます。

また、必ずコード ファイルの先頭に System.Text.RegularExpressions を含めてください。

詳細については、MSDN のRegex.IsMatch メソッド (文字列、文字列)を参照してください。

オプション 2: 文字列を分割する

おそらく効率は劣りますが、文字列を分割することもできます。

commaseparatedstring.Split(new Char[] { ',' }).Contains( a.SOMEVALUE1 )
于 2013-01-24T14:58:42.973 に答える
1

どうですか:
- コンマで区切られた文字列をコンマで区切る
- 全体で contains() の代わりに各部分文字列で equals() を呼び出しますか?

于 2013-01-24T14:59:23.473 に答える
0

.SOMEVALUE2 = If(commaseparatedstring.Split('、')。Contains(a.SOMEVALUE1)、True、False)

于 2013-01-24T15:08:18.607 に答える