DataTable の Rows コレクションと Columns コレクションを使用して、の内容にアクセスできます。 Select メソッドを使用して、検索条件、並べ替え順序、行の状態などの条件に従って DataTable 内のデータのサブセットを返すこともできます。 さらに、主キー値を使用して特定の行を検索するときにFind の メソッドを使用できます。
DataTable オブジェクトの Select メソッドは、指定した条件に一致する一連のDataRowオブジェクトを返します。
Select は、フィルター式、並べ替え式、および DataViewRowState の省略可能な引数を受け取ります。 フィルター式は、 dataColumn 値に基づいて返す行 ( LastName = 'Smith'
など) を識別します。 並べ替え式は、 LastName ASC, FirstName ASC
など、列の並べ替えに関する標準的な SQL 規則に従います。 式の記述に関する規則については、Expression クラスの プロパティを参照してください。
ヒント
DataTable の Select メソッドを多数呼び出す場合は、まず DataTable の DataView を作成することで パフォーマンスを向上させることができます。 DataView を作成すると、テーブルの行にインデックスが作成されます。 その後 、Select メソッドはそのインデックスを使用し、クエリ結果を生成する時間を大幅に短縮します。 DataTable の DataView の作成の詳細については、「DataViews」を参照してください。
Select メソッドは、DataViewRowStateに基づいて表示または操作する行のバージョンを決定します。 次の表では、使用可能な DataViewRowState 列挙値について説明します。
DataViewRowState の値 | 説明 |
---|---|
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 配列を返し、CustLName で並べ替えられたすべての行を参照する別の DataRow 配列を返します。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");