【发布时间】:2010-06-22 20:10:41
【问题描述】:
我有一个专门的 (string, string) (_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()}
这在匹配“word”甚至“my word”时效果很好,但我想搜索“my”和“word”以及“also this”。意思是用空格分隔的单词和短语。很像谷歌和必应。当用户输入一个值时,我只需要引用这些短语。以下 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()}
如果我说这一切都错了,请赐教。似乎应该很容易。
提前致谢, 凯文
【问题讨论】: