多个搜索条件(VB.NET)

时间:2014-11-12 23:25:22

标签: vb.net search

所以我的问题是:
我有一个自定义类型的列表{Id as Integer,Tag()as String},
我想对它进行多标准搜索;例如: SearchTags = {"文件""的HelloWorld"} 搜索结果将以此格式放置ListBox(ListBox1):
resultItem.id& " - " &安培; resultItem.tags

我已经尝试过在论坛上找到的所有内容,但它对我没有用(它适用于数据库或字符串数​​据类型)

现在,我真的需要你的帮助。提前谢谢。

    For Each MEntry As EntryType In MainList
        For Each Entry In MEntry.getTags
            For Each item As String In Split(TextBox1.Text, " ")
                If Entry.Contains(item) Then
                    If TestIfItemExistsInListBox2(item) = False Then
                        ListBox1.Items.Add(item & " - " & Entry.getId)
                    End If
                End If
            Next
        Next
    Next

示例自定义数组:

(24,{"snippet","vb"})
(32,{"console","cpp","helloworld"})
and so on...

我搜索了(" Snippet vb test"):

snippet vb helloWorld - 2
snippet vb tcpchatEx - 16
cs something
test

所以,我会得到包含我的一个搜索短语的所有内容。

我期待以下:

snippet vb tcp test
snippet vb dll test
snippet vb test metroui

所以,我希望得到包含我所有搜索短语的所有内容。


我的整个代码可能类

Imports Newtonsoft.Json
Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    End Sub
    Dim MainList As New List(Of EntryType)
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MainList.Clear()
        Dim thr As New Threading.Thread(AddressOf thr1)
        thr.SetApartmentState(Threading.ApartmentState.MTA)
        thr.Start()
    End Sub
    Delegate Sub SetTextCallback([text] As String)
    Private Sub SetTitle(ByVal [text] As String) ' source <> mine
        If Me.TextBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetTitle)
            Me.Invoke(d, New Object() {[text]})
        Else
            Me.Text = [text]
        End If
    End Sub
    Sub thr1()
        Dim linez As Integer = 1
        Dim linex As Integer = 1
        For Each line As String In System.IO.File.ReadAllLines("index.db")
            linez += 1
        Next

        For Each line As String In System.IO.File.ReadAllLines("index.db")
            Try
                Application.DoEvents()
                Dim a As saLoginResponse = JsonConvert.DeserializeObject(Of saLoginResponse)(line) ' source <> mine
                Application.DoEvents()
                MainList.Add(New EntryType(a.id, Split(a.tags, " ")))
                linex += 1
                SetTitle("Search (loading, " & linex & " of " & linez & ")")
            Catch ex As Exception

            End Try
        Next
        SetTitle("Search")
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim searchTags() As String = TextBox1.Text.Split(" ")
        Dim query = MainList.Where(Function(et) et.Tags.Any(Function(tag) searchTags.Contains(tag))).ToList
        For Each et In query
            ListBox1.Items.Add(et.Id)
        Next
    End Sub
    Private Sub Button4_Click(sender As Object, e As EventArgs) ' test
        MsgBox(Mid(ListBox1.SelectedItem.ToString, 1, 6)) ' test
    End Sub 'test, removeonrelease
End Class
Public Class EntryType
    Public Property Id As Integer
    Public Property Tags() As String
    Public Sub New(ByVal _id As Integer, ByVal _tags() As String)
        Me.Id = Id
        Me.Tags = Tags
    End Sub
    Public Function GetTags() As String
        'to tell the Listbox what to display
        Return Tags
    End Function
    Public Function GetId() As Integer
        'to tell the Listbox what to display
        Return Id
    End Function
End Class

我还编辑了你的EntryType类;我添加了一个构造函数,删除了toString并添加了GetTags和GetID。


示例&#34; DB&#34;我正在使用(&#34; db&#34; as&#34; index.db&#34;在exec目录中):

{"tags":"vb.net lol test qwikscopeZ","id":123456}
{"tags":"vb.net lol test","id":12345}
{"tags":"vb.net lol","id":1234}
{"tags":"vb.net","id":123}
{"tags":"cpp","id":1}
{"tags":"cpp graphical","id":2}
{"tags":"cpp graphical fractals","id":3}
{"tags":"cpp graphical fractals m4th","id":500123}

错误:

Debugger:Exception Intercepted: _Lambda$__1, Form2.vb line 44
An exception was intercepted and the call stack unwound to the point before the call from user code where the exception occurred.  "Unwind the call stack on unhandled exceptions" is selected in the debugger options.
Time: 13.11.2014 03:46:10
Thread:<No Name>[5856]

1 个答案:

答案 0 :(得分:0)

这是一个Lambda查询。谓词上的Where过滤器,因为TagsArray,您可以使用Any函数根据另一个Array执行搜索 - {{1 }}。您可以将每个类对象存储在列表框中,因为它存储了对象,您只需要告诉它要显示的内容(见下文)。

SearchTags