РЕДАКТИРОВАТЬ: Примечание. Я должен был упомянуть, что я не заинтересован в использовании .Select, DataRowView, RowFind и т. Д. Спасибо за эти предложения, но код, как он есть, я надеялся оптимизировать.
Я написал функцию для поиска в базе данных терминов в массиве. Затем я возвращаю datatable как набор данных, чтобы он мог быть привязан к DataGridView. У кого-нибудь есть идеи по оптимизации? Так как это поиск в реальном времени (каждый введенный термин ищет сразу), я бы хотел сделать функцию максимально быстрой. На самом деле скорость уже довольно хорошая, но я решил, что стоит спросить всех вас, могу ли я что-то изменить в этом.
Открытая функция SearchEngine (ByVal Terms () в виде строки, ByRef ResidentTBL в качестве DataTable) в качестве DataSet
Dim newdts As New DataSet («Пользователи»)
Dim newtable, искушаемый как новый DataTable
Dim residentPassCeiling, tempPassCeiling, termceiling As Integer
residentPassCeiling = ResidentTBL.Rows.Count - 1
Termsceiling = Terms.GetUpperBound (0)
newtable = ResidentTBL.Clone
For j = 0 To termsceiling
If j < 1 Then
'######################## BEGIN First Pass ########################################################################
For i = 0 To residentPassCeiling
If ResidentTBL.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper = Terms(j).ToUpper Then
'we have an excact match on account skip further additions
newtable.Rows.Clear()
newtable.ImportRow(ResidentTBL.Rows(i))
newdts.Tables.Add(newtable)
Return newdts
Else
If _
ResidentTBL.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.displayName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.sn - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.givenName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.l - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.department - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.telephoneNumber - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.building - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Then
'then add to the row
newtable.ImportRow(ResidentTBL.Rows(i))
End If
End If
Next i
'######################## END First Pass ########################################################################
Else
'######################## BEGIN Second.. Pass(es) ########################################################################
'Further searches we want to search the already filtered datatable from each term
temptable = newtable.Clone
temptable = newtable.Copy
newtable.Clear()
tempPassCeiling = temptable.Rows.Count - 1
For i = 0 To tempPassCeiling
If temptable.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper = Terms(j).ToUpper Then
'we have an excact match on account skip further additions
newtable.Rows.Clear()
newtable.ImportRow(temptable.Rows(i))
newdts.Tables.Add(newtable)
Return newdts
Else
If _
temptable.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.sn - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.givenName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.l - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.department - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.telephoneNumber - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.building - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Then
'then add to the row
newtable.ImportRow(temptable.Rows(i))
End If
End If
Next i
temptable = Nothing
'######################## END Second.. Pass(es) ########################################################################
End If
Next j
newdts.Tables.Add(newtable)
ResidentTBL = Nothing
Return newdts
newdts = Nothing
End Function