Так что моя проблема заключается в том:
У меня есть список из пользовательского типа {Id, как Integer, Tag() As String}
и я хочу, чтобы выполнить поиск многооконного критерия в теме; например: SearchTags = { "Документ", "HelloWorld"} Результаты поиска будут помещены в ListBox (listbox1) в следующем формате:
resultItem.id & "-" & resultItem.tagsнесколько критериев поиска (VB.NET)
Я уже попробовал все, что мог найти на форумах, но это не сработало для меня (это было для db или для строковых типов данных)
Теперь мне действительно нужна ваша помощь. Заранее спасибо.
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 тест"):
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.
Пример "DB" им, работающие с ("DB", как "index.db" в директории ехес):
{"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]
вы можете дать некоторые данные дб образца – Mozzie
Это не дб, его массив пользовательского типа (идентификатор в виде целого числа, тег() в виде строки) – David
Параметр '' GetId' и функции GetTags' являются избыточными, так как вы можете просто вызвать свойства напрямую - FYI – OneFineDay