首页 文章

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

提问于
浏览
0

我有一个专门的字符串字典(字符串,字符串)(_ 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

    你好你必须有一个交叉连接来解决这个问题

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

相关问题