我有一个专门的字符串字典(字符串,字符串)(_ RulesAndTheirDescriptions),它包含给定类中方法的名称(键)和描述(值) . 我目前执行以下查询以搜索键或值的匹配,然后将其绑定到网格 . 效果很好!
Dim Results = From v In _RulesAndTheirDescriptions _
Where v.Value.ToString().ToUpper().Contains(Me.txtSearchFor.Text.ToUpper()) _
Or v.Key.ToString().ToUpper().Contains(Me.txtSearchFor.Text.ToUpper()) _
Order By v.Key _
Select New With {.Rule = v.Key, .Description = v.Value.ToString()}
匹配“单词”或甚至“我的单词”时这很有用,但我想搜索“我的”,“单词”和“也是这个” . 意思是由空格分隔的单词和短语 . 很像谷歌和bing . 当用户输入值时,我只需要引用短语 . 以下RegEx负责为我提供用户正在查找的列表字/短语 . 现在我很难将上述查询与新的增强列表结合使用 .
请原谅以下代码 . 我只是想测试一下并让它运转起来 .
Dim b As Match
b = Regex.Match(Me.txtSearchFor.Text, "(?<=(?:^|\s|,)"")[^""]*?(?="")|(?<=\s|^)(?!"")[\w\W]+?(?=\s|$)")
Dim sl As List(Of String) = New List(Of String)
If b.Success Then
sl.Add(b.Value.ToUpper())
Dim sMatch = b.NextMatch()
While sMatch IsNot Nothing AndAlso sMatch.Success
sl.Add(sMatch.Value.ToUpper())
sMatch = sMatch.NextMatch()
End While
End If
我在本网站的另一篇文章中试图做到以下几点,但这并不是任何结果 . 我怀疑是因为sl.ToString()返回的是类型而不是值?
Dim Results = From v In _RulesAndTheirDescriptions _
Where v.Value.ToString().ToUpper().Contains(sl.ToString()) _
Order By v.Key _
Select New With {.Rule = v.Key, .Description = v.Value.ToString()}
如果我说这一切都错了,请赐教 . 好像它应该很容易 .
凯文,提前谢谢
1 回答
你好你必须有一个交叉连接来解决这个问题
当多个令牌可以匹配规则时,这可以产生重复 . 因此,如果您想要唯一值,则可以执行不同的操作