2009-03-11 2 views
30

Есть ли способ найти значение в DataTable в C# без выполнения операции «строка за строкой»?Найти значение в DataTable

Значение может быть частью (подстрока строки [columnName] .value, разделенная запятой) ячейка в datatable, и значение может присутствовать в любом столбце в строке.

ответ

49

Объект DataTable или DataSet будет иметь метод выбора, который возвращает массив результатов DataRow на основе запроса, переданного в качестве его параметра.

Глядя на ваше требование, ваше фильтрационное выражение должно быть несколько общим, чтобы сделать эту работу.

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

, как мы можем сделать выше синтаксис с LINQ. – Karan

14

Может быть, вы можете отфильтровать строки по возможным столбцам, как это:

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

, если вы хотите точное значение: DataRow [] отфильтрованRow = datatable.Select ("ColumnName = 'value'"); – Nicola

8

AFAIK, нет ничего встроенного для поиска всех столбцов. Вы можете использовать Find только против первичного ключа. Select нужны указанные столбцы. Возможно, вы можете использовать LINQ, но в конечном итоге это просто делает тот же цикл. Может быть, просто разразитесь? По крайней мере, это будет доступно для чтения.

-1

этот вопрос, поставленный в 2009 году, но я хочу поделиться своими кодами:

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

Это вопрос C#, а не VB. – AzNjoE

+0

и циклы на строках и столбцах, что OP хочет избежать – bluish