2009-04-14 13 views
0

EDIT: Remarque. J'aurais dû mentionner que je ne suis pas intéressé par l'utilisation du .Select, DataRowView, RowFind, etc. Merci pour ces suggestions mais le code tel qu'il est, j'espérais optimiser.Recherches DataTable personnalisées

J'ai écrit une fonction pour rechercher une datatable pour les termes dans un tableau. Je retourne ensuite le datatable comme un ensemble de données afin qu'il puisse être lié à un DataGridView. Quelqu'un at-il des idées d'optimisation? Comme il s'agit d'une recherche en temps réel (chaque terme tapé instantanément recherche), je voudrais rendre la fonction aussi vite que possible. La vitesse est déjà assez bonne mais je me suis dit que je devrais vous demander à tous s'il y avait autre chose que je pourrais changer à ce sujet.

  • VB.NET
  • .NET 2.0

Fonction publique SearchEngine (ByVal Conditions() As String, ByRef ResidentTBL Comme DataTable) Comme DataSet Dim newdts As New DataSet ("Utilisateurs") Dim newtable, tenttable Comme nouveau DataTable Dim residentPassCeiling, tempPassCeiling, termsceiling As Entier residentPassCeiling = ResidentTBL.R ows.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 
+0

Si vous ne voulez pas envisager de changer vous avez probablement déjà votre réponse sur toutes les optimisations disponibles. –

Répondre