我有一个(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()}
这在匹配“单词”或甚至“我的单词”时效果很好,但我想搜索“我的”,“单词”和“也是这个”。意思是由空格分隔的单词和短语。很像谷歌和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()}
如果我说这一切都错了,请赐教。好像它应该很容易。
提前致谢, 凯文
答案 0 :(得分:0)
你好你必须有一个交叉连接来解决这个问题
Dim Results = From v In _RulesAndTheirDescriptions _
join y in sl on 1 equals 1
Where v.Value.ToString().ToUpper().Contains(y) _
Order By v.Key _
Select New With {.Rule = v.Key, .Description = v.Value.ToString()}
当多个令牌可以匹配规则时,这会产生重复。因此,如果您想要唯一值,则可以执行不同的操作
Like Results.Distinct()