2009-03-11 8 views
30

Gibt es eine Möglichkeit, einen Wert in DataTable in C# zu finden, ohne Zeile-für-Zeile-Operation zu tun?Suchen Sie einen Wert in DataTable

Der Wert kann Teil einer (durch Komma getrennten) Teilzeichenkette (Spalte [columnName] .value) einer Zelle in der Datentabelle sein, und der Wert kann in einer der Spalten in der Zeile vorhanden sein.

Antwort

49

Ein DataTable- oder DataSet-Objekt verfügt über eine Select-Methode, die ein DataRow-Array von Ergebnissen basierend auf der als Parameter übergebenen Abfrage zurückgibt.

Wenn Sie Ihre Anforderung betrachten, muss Ihre Filterausprägung etwas allgemein sein, damit dies funktioniert.

myDataTable.Select("columnName1 like '%" + value + "%'"); 
+1

wie können wir die obige Syntax mit Linq tun. – Karan

14

Vielleicht können Sie Reihen von möglichen Spalten wie folgt filtern:

DataRow[] filteredRows = 
    datatable.Select(string.Format("{0} LIKE '%{1}%'", columnName, value)); 
+2

Wenn Sie den genauen Wert möchten: DataRow [] filteredRow = datatable.Select ("ColumnName = 'value'"); – Nicola

8

AFAIK, es gibt nichts in für die Suche alle Spalten aufgebaut ist. Sie können Find nur für den Primärschlüssel verwenden. Select benötigt angegebene Spalten. Sie können vielleicht LINQ verwenden, aber letztendlich macht dies nur die gleiche Schleife. Vielleicht einfach selbst ausrollen? Es wird zumindest lesbar sein.

-1

diese Frage im Jahr 2009 gefragt, aber ich möchte, dass meine Codes teilen:

Public Function RowSearch(ByVal dttable As DataTable, ByVal searchcolumns As String()) As DataTable 

    Dim x As Integer 
    Dim y As Integer 

    Dim bln As Boolean 

    Dim dttable2 As New DataTable 
    For x = 0 To dttable.Columns.Count - 1 
     dttable2.Columns.Add(dttable.Columns(x).ColumnName) 
    Next 

    For x = 0 To dttable.Rows.Count - 1 
     For y = 0 To searchcolumns.Length - 1 
      If String.IsNullOrEmpty(searchcolumns(y)) = False Then 
       If searchcolumns(y) = CStr(dttable.Rows(x)(y + 1) & "") & "" Then 
        bln = True 
       Else 
        bln = False 
        Exit For 
       End If 
      End If 
     Next 
     If bln = True Then 
      dttable2.Rows.Add(dttable.Rows(x).ItemArray) 
     End If 
    Next 

    Return dttable2 


End Function 
+0

Dies ist eine C# -Frage, nicht VB. – AzNjoE

+0

und Schleifen in Zeilen und Spalten, was das OP vermeiden möchte – bluish

Verwandte Themen