我正在使用linq查询,我在这里做了类似的事情:
viewModel.REGISTRATIONGRPS = (From a In db.TABLEA
Select New SubViewModel With {
.SOMEVALUE1 = a.SOMEVALUE1,
...
...
.SOMEVALUE2 = If(commaseparatedstring.Contains(a.SOMEVALUE1), True, False)
}).ToList()
现在我的问题是,它确实搜索单词,但是搜索子字符串,例如:
commaseparatedstring =" EWM,KI,KP" SOMEVALUE1 =" EW"
它返回true,因为它包含在EWM中?
我需要的是在逗号分隔的字符串中找到单词(不包含子字符串)!
答案 0 :(得分:2)
选项1:正则表达式
Regex.IsMatch(commaseparatedstring, @"\b" + Regex.Escape(a.SOMEVALUE1) + @"\b")
\b
部分称为“word boundaries”并告诉正则表达式引擎您正在寻找“完整字”。 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 )
答案 1 :(得分:1)
怎么样:
- 用逗号分隔commaseparatedstring
- 在整个事物上调用每个子字符串上的equals()而不是contains()?
答案 2 :(得分:0)
.SOMEVALUE2 = If(commaseparatedstring.Split(',')。包含(a.SOMEVALUE1),True,False)