Найти значение в DataTable
Есть ли способ найти значение в DataTable в С# без выполнения операции "строка за строкой"?
Значение может быть частью (подстрока строки [columnName].value, разделенная запятой) ячейка в datatable, и значение может присутствовать в любом столбце в строке.
Ответы
Ответ 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