可以使用 DataTable 的“行”和“列”集合访问 a 的内容。 还可以使用 Select 该方法根据搜索条件、排序顺序和行状态等条件返回 DataTable 中的数据子集。 此外,在使用主键值搜索特定行时,可以使用 FindDataRowCollection 的方法。
DataTable 对象的 Select 方法返回一组DataRow与指定条件匹配的对象。
Select 采用筛选器表达式、排序表达式和 DataViewRowState 的可选参数。 筛选器表达式标识基于 DataColumn 值返回的行,例如 LastName = 'Smith'
。 排序表达式遵循对列进行排序的标准 SQL 约定,例如 LastName ASC, FirstName ASC
。 有关编写表达式的规则,请参阅 ExpressionDataColumn 类的属性。
小窍门
如果要对 DataTable 的 Select 方法执行多次调用,可以先为 DataView 创建一个,从而提高性能。 创建 DataView 时会为表中的行创建索引。 然后 ,Select 方法使用该索引,显著缩短生成查询结果的时间。 有关为 DataTable 创建 DataView 的信息,请参阅 DataViews。
Select 方法基于 确定要查看或处理的行的版本DataViewRowState。 下表描述了可能的 DataViewRowState 枚举值。
DataViewRowState 值 | DESCRIPTION |
---|---|
CurrentRows | 当前行,包括未更改、添加和修改的行。 |
已删除 | 已删除的行。 |
ModifiedCurrent | 当前版本,它是原始数据的修改版本。 (请参阅 ModifiedOriginal。 |
ModifiedOriginal | 所有已修改行的原始版本。 当前版本使用 ModifiedCurrent 提供。 |
已添加 | 新行。 |
没有 | 没有。 |
OriginalRows | 原始行,包括未更改的行和已删除的行。 |
不变 | 未更改的行。 |
在以下示例中,将筛选 DataSet 对象,以便仅处理 DataViewRowState 设置为 CurrentRows 的行。
Dim column As DataColumn
Dim row As DataRow
Dim currentRows() As DataRow = _
workTable.Select(Nothing, Nothing, DataViewRowState.CurrentRows)
If (currentRows.Length < 1 ) Then
Console.WriteLine("No Current Rows Found")
Else
For Each column in workTable.Columns
Console.Write(vbTab & column.ColumnName)
Next
Console.WriteLine(vbTab & "RowState")
For Each row In currentRows
For Each column In workTable.Columns
Console.Write(vbTab & row(column).ToString())
Next
Dim rowState As String = _
System.Enum.GetName(row.RowState.GetType(), row.RowState)
Console.WriteLine(vbTab & rowState)
Next
End If
DataRow[] currentRows = workTable.Select(
null, null, DataViewRowState.CurrentRows);
if (currentRows.Length < 1 )
Console.WriteLine("No Current Rows Found");
else
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", column.ColumnName);
Console.WriteLine("\tRowState");
foreach (DataRow row in currentRows)
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", row[column]);
Console.WriteLine("\t" + row.RowState);
}
}
Select 方法可用于返回具有不同 RowState 值或字段值的行。 以下示例返回一个 DataRow 数组,该数组引用所有已删除的行,并返回另一个 DataRow 数组,该数组引用所有行(按 CustLName 排序),其中 CustID 列大于 5。 有关如何查看 已删除 行中的信息,请参阅 行状态和行版本。
' Retrieve all deleted rows.
Dim deletedRows() As DataRow = workTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
' Retrieve rows where CustID > 5, and order by CustLName.
Dim custRows() As DataRow = workTable.Select( _
"CustID > 5", "CustLName ASC")
// Retrieve all deleted rows.
DataRow[] deletedRows = workTable.Select(
null, null, DataViewRowState.Deleted);
// Retrieve rows where CustID > 5, and order by CustLName.
DataRow[] custRows = workTable.Select("CustID > 5", "CustLName ASC");