我正在使用一个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 中?
我需要的是在逗号分隔的字符串中找到单词(不包含子字符串)!
选项 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 )
:
- 用逗号分隔逗号
分隔字符串- 在每个子字符串上调用 equals() 而不是在整个事情上调用 contains()?
.SOMEVALUE2 = If(逗号分隔字符串。Split(',')。包含(a.SOMEVALUE1), 真, 假)