Vb.net 如何遍历string.Split()数组,将每个项的LINQ查询结果连接在一起?

Vb.net 如何遍历string.Split()数组,将每个项的LINQ查询结果连接在一起?,vb.net,linq,Vb.net,Linq,在我的应用程序中,我有一个搜索查询文本框(txtSearch),它可以很好地处理具有以下LINQ的单字查询: slstFilteredItems = From s In slstItems _ Where s.strText.IndexOf(txtSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0 _ Select s 但是,如果您使用多词查询进行搜索,

在我的应用程序中,我有一个搜索查询文本框(txtSearch),它可以很好地处理具有以下LINQ的单字查询:

slstFilteredItems = From s In slstItems _
                    Where s.strText.IndexOf(txtSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0 _
                    Select s
但是,如果您使用多词查询进行搜索,比如说“createcustomer”(无引号),它只会找到完全包含结果“createcustomer”(不区分大小写)的结果

所以我能想到的处理这个问题的最简单方法是使用一个查询,该查询按顺序与每个单词相交,如下所示:

slstFilteredItems = (From s In slstItems _
                    Where s.strText.IndexOf(txtSearch.Text.Split(" ")(0), StringComparison.OrdinalIgnoreCase) >= 0 _
                    Select s).Intersect _
                    (From s In slstItems _
                    Where s.strText.IndexOf(txtSearch.Text.Split(" ")(1), StringComparison.OrdinalIgnoreCase) >= 0 _
                    Select s)
                    'And so on...
那么,我如何使上述查询更通用(即:能够处理查询中的任意数量的单词)


我应该注意,被查询的对象是从Access数据库中提取的字符串列表。目前,此应用程序只查询数据库一次,如果可能的话,我希望保持这种方式。

如果您访问的是SQL Server数据库,全文搜索可能是一种更好的方法


以下是一种可能的方法:

Dim words = "Dog cAt biRD"
Dim slstItems = New String() { "dog thing cat bird ", "bird cat", "cat foo dog bird " }

'Query Syntax (with some fluent syntax)
Dim q = From s In slstItems.Select(Function(x) x.ToLower())
        Where words.Split(" ").Select(Function(x) x.ToLower()).All(Function(x) s.Contains(x))
        Select s

'All Fluent Syntax 
slstItems.Select(Function(x) x.ToLower()) _
    .Where(Function(s) words.Split(" ").Select(Function(x) x.ToLower()) _
                        .All(Function(w) s.Contains(w)) _
    )
两者都返回:

dog thing cat bird   
cat foo dog bird 

请注意,与bigtlb的答案(这是一个更好的数据库搜索解决方案)相比,这是低效的。

这应该适用于txtSearch.text.Split数组中任意数量的项

slstFilteredItems = (From splits In txtSearch.Text.Split(" ").ToList _
                    From s In slstItems _
                    Where s.strText.IndexOf(splits, StringComparison.OrdinalIgnoreCase) >= 0 _
                    Select s)

不幸的是,没有。这是一个从Access数据库中提取的字符串列表,我正在根据查询进行筛选。我将编辑这个问题。