DataTable の内容には、DataTable の Rows コレクションと Columns コレクションを使用してアクセスできます。また、DataTable.Select メソッドを使用すると、検索条件、並べ替え順序、行の状態などの特定の基準に基づいて DataTable 内のデータのサブセットを返すことができます。さらに、主キー値を使用して特定の行を検索するときは、DataRowCollection の Find メソッドを使用できます。
DataTable オブジェクトの Select メソッドは、指定された基準と一致する DataRow オブジェクトのセットを返します。Select は、フィルタ式、並べ替え式、および DataViewRowState のオプション引数を受け取ります。フィルタ式は、DataColumn 値に基づいて返す行を識別する LastName = 'Smith'
などの式です。並べ替え式は、列の並べ替えについての標準 SQL 規則に基づく LastName ASC, FirstName ASC
などの式です。式の記述の規則については、DataColumn クラスの Expression プロパティのトピックを参照してください。
****ヒント DataTable の Select メソッドへの呼び出しを多数実行する場合は、最初に DataTable の DataView を作成することにより、パフォーマンスを向上させることができます。DataView を作成すると、テーブルの行にインデックスが付けられます。Select メソッドがこのインデックスを使用すると、クエリ結果を生成するための時間が大幅に減少します。DataTable の DataView を作成する方法については、「DataView の作成と使用」を参照してください。
Select メソッドは、DataViewRowState に基づいて、表示または操作する行のバージョンを判断します。有効な DataViewRowState 列挙値の説明を次の表に示します。
メンバ名 | 説明 |
---|---|
CurrentRows | 変更されていない行、追加された行、および変更された行を含む現在の行。 |
Deleted | 削除された行。 |
ModifiedCurrent | 元のデータを変更した後のバージョンである、現在のバージョン。ModifiedOriginal を参照してください。 |
ModifiedOriginal | 変更されたすべての行の元のバージョン。現在のバージョンは、ModifiedCurrent. を使用して取得できます。 |
Added | 新しい行。 |
None | なし。 |
OriginalRows | 変更されていない行および削除された行を含む元の行。 |
Unchanged | 変更されていない行。 |
DataSet オブジェクトをフィルタ処理して、DataViewRowState が CurrentRows に設定されている行だけを操作できるようにする例を次に示します。
Dim myCol As DataColumn
Dim myRow As DataRow
Dim currRows() As DataRow = workTable.Select(Nothing, Nothing, DataViewRowState.CurrentRows)
If (currRows.Length < 1 ) Then
Console.WriteLine("No Current Rows Found")
Else
For Each myCol in workTable.Columns
Console.Write(vbTab & myCol.ColumnName)
Next
Console.WriteLine(vbTab & "RowState")
For Each myRow In currRows
For Each myCol In workTable.Columns
Console.Write(vbTab & myRow(myCol).ToString())
Next
Dim rowState As String = System.Enum.GetName(myRow.RowState.GetType(), myRow.RowState)
Console.WriteLine(vbTab & rowState)
Next
End If
[C#]
DataRow[] currRows = workTable.Select(null, null, DataViewRowState.CurrentRows);
if (currRows.Length < 1 )
Console.WriteLine("No Current Rows Found");
else
{
foreach (DataColumn myCol in workTable.Columns)
Console.Write("\t{0}", myCol.ColumnName);
Console.WriteLine("\tRowState");
foreach (DataRow myRow in currRows)
{
foreach (DataColumn myCol in workTable.Columns)
Console.Write("\t{0}", myRow[myCol]);
Console.WriteLine("\t" + myRow.RowState);
}
}
Select メソッドを使用して、異なる RowState 値またはフィールド値を持つ行を返すこともできます。削除されたすべての行を参照する DataRow 配列を返し、また、CustID 列が 5 より大きいすべての行を CustLName に基づいて並べ替えた別の DataRow 配列も返す例を次に示します。Deleted 行の情報を表示する方法については、「行の状態とバージョン」を参照してください。
' Retrieve all deleted rows.
Dim delRows() 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")
[C#]
// Retrieve all deleted rows.
DataRow[] delRows = workTable.Select(null, null, DataViewRowState.Deleted);
// Retrieve rows where CustID > 5, and order by CustLName.
DataRow[] custRows = workTable.Select("CustID > 5", "CustLName ASC");
参照
DataTable 内のデータの操作 | 行の状態とバージョン | DataRow クラス | DataSet クラス | DataTable クラス | DataViewRowState 列挙体