Подтвердить что ты не робот

Найти значение в DataTable

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Возможно, вы можете фильтровать строки по следующим столбцам следующим образом:

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

Ответ 3

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

Ответ 4

этот вопрос задан в 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