Vb.net 如何遍历string.Split()数组,将每个项的LINQ查询结果连接在一起?
在我的应用程序中,我有一个搜索查询文本框(txtSearch),它可以很好地处理具有以下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 但是,如果您使用多词查询进行搜索,
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数据库中提取的字符串列表,我正在根据查询进行筛选。我将编辑这个问题。