【发布时间】:2010-10-12 15:21:25
【问题描述】:
有没有办法在 C# 中的 DataTable 中找到一个值而不进行逐行操作?
该值可以是数据表中单元格(row[columnName].value 的子字符串,以逗号分隔)的一部分,并且该值可以出现在该行的任何一列中。
【问题讨论】:
有没有办法在 C# 中的 DataTable 中找到一个值而不进行逐行操作?
该值可以是数据表中单元格(row[columnName].value 的子字符串,以逗号分隔)的一部分,并且该值可以出现在该行的任何一列中。
【问题讨论】:
DataTable 或 DataSet 对象将有一个 Select 方法,该方法将根据作为参数传入的查询返回一个 DataRow 数组。
根据您的要求,您的过滤器表达式必须具有一定的通用性才能使其正常工作。
myDataTable.Select("columnName1 like '%" + value + "%'");
【讨论】:
也许您可以像这样按可能的列过滤行:
DataRow[] filteredRows =
datatable.Select(string.Format("{0} LIKE '%{1}%'", columnName, value));
【讨论】:
AFAIK,没有内置用于搜索所有列的内容。您只能对主键使用Find。 Select 需要指定的列。您也许可以使用 LINQ,但最终这只是执行相同的循环。也许只是自己展开?至少它是可读的。
【讨论】:
这个问题在 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
【讨论】: