2013-01-24 81 views
1

我使用LINQ查询在那里我做了什么liike此:查找单词(不包含子)以逗号分隔字符串

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

我现在的问题是,这does'n搜索词但子因此,例如:

commaseparatedstring = “EWM,KI,KP” SOMEVALUE1 = “EW”

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

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

回答

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) 
+0

感谢您的详细解释,但我得到一个 'LINQ到实体' 系统。两个选项都有NotSupportedException? – stare

+0

好吧,我最终做了查询之外的分裂'Dim fn作为新列表(字符串)(dataObject.REGISTRATIONGRP.Split(“,”c))'和内部然后'如果(fn.Contains(benutzergrp.BENUTZERGRP_KUERZEL),真,假)'这似乎工作。 – stare

1

怎么样:
- 由逗号
分离commaseparatedstring - 每个子调用equals()方法,而不是()在整个事情中包含?

0

.SOMEVALUE2 = IF(commaseparatedstring.Split( '')。包含(a.SOMEVALUE1),真,假)

相关问题