2009-03-11 24 views
30

¿Hay alguna forma de encontrar un valor en DataTable en C# sin realizar la operación fila por fila?Busque un valor en DataTable

El valor puede ser una parte de (una subcadena de la fila [columnName] .value, separada por comas) una celda en la tabla de datos y el valor puede estar presente en cualquiera de las columnas de la fila.

Respuesta

49

Un objeto DataTable o DataSet tendrá un Método de selección que devolverá una matriz de resultados de DataRow basada en la consulta pasada como su parámetro.

En cuanto a su requisito, su expresión de filtro tendrá que ser algo general para que esto funcione.

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

Cómo podemos hacer la sintaxis anterior con LINQ. – Karan

14

Tal vez puede filtrar filas por columnas posibles de esta manera:

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

si quiere el valor exacto: DataRow [] filteredRow = datatable.Select ("ColumnName = 'value'"); – Nicola

8

yo sepa, no hay nada construido en para buscar en todas las columnas. Puede usar Find solo con la clave principal. Select necesita columnas especificadas. Quizás puedas usar LINQ, pero en última instancia esto solo hace el mismo bucle. ¿Tal vez simplemente desenrolló usted mismo? Será legible, al menos.

-1

esta pregunta formulada en 2009, pero quiero compartir mis códigos:

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

Esta es una pregunta C#, no VB. – AzNjoE

+0

y bucles en filas y columnas, algo que el OP quiere evitar – bluish