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"

它返回 true 因为它包含在 EWM 中?

我需要的是在逗号分隔的字符串中查找单词(不包含子字符串)!

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 Method (String, String)

选项 2:拆分字符串

您也可以尝试拆分字符串,这会更简单一些,但效率可能较低。

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

怎么样:
- 用逗号分隔逗号分隔
字符串 - 在每个子字符串上调用 equals() 而不是在整个事物上调用 contains()?

于 2013-01-24T14:59:23.473 回答
0

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

于 2013-01-24T15:08:18.607 回答