如何使用LINQ查找字符串列表的匹配数据

时间:2010-06-22 20:10:41

标签: vb.net regex linq list

我有一个(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()}

如果我说这一切都错了,请赐教。好像它应该很容易。

提前致谢, 凯文

1 个答案:

答案 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()