VB.NET DataTableをSelect検索をして絞り込みや存在チェックを行う
VB.NETでDataTableをSelectして絞り込みや存在チェックを行う方法を紹介します。
以下のDataTableがあるとします。
| id | first_name | last_name | department_id | height |
|---|---|---|---|---|
| 1 | 一郎 | 山田 | 1 | 170 |
| 2 | 次郎 | 佐藤 | 2 | 175 |
| 3 | 三郎 | 田中 | 1 | 185 |
| 4 | 四郎 | 鈴木 | 2 | 155 |
身長が175cmの社員が存在するのかをチェックをしたい場合は以下のように判定します。
Dim dt As DataTable 'employee
Dim rows As DataRow()
rows = dt.Select("height = 175")
If rows.Length <> 0 Then
'データあり
End Ifラムダ式(無名関数)を使用すれば以下のようにもっとシンプルに存在チェックを行うことができます。
If dt.Rows.Cast(Of DataRow).Any(Function(row) CInt(row("height")) = 175) Then
'データあり
End Ifラムダ式の基本的な使い方についてはVB.NET ラムダ式(無名関数)の基本的な使い方で紹介しています。
解説
DataTable.Select(条件)で条件に該当する行をDataRowの配列で返却します。
返却されたDataRow配列の長さが0以上であれば条件に該当するレコードが存在するということになります。
表示順を指定する
employeeテーブルでdepartment_id = 1のレコードを抽出するとします。
(カラムが文字列型の場合はシングルクォーテーションで囲うのを忘れないようにします。)
Dim dt As DataTable 'employee
Dim rows As DataRow()
rows = dt.Select("department_id = '1'")2件が取得対象となりますが、DataRowの配列にセットされる順番はどのようにセットされるかはわかりません。
| id | first_name | last_name | department_id | height |
|---|---|---|---|---|
| 1 | 一郎 | 山田 | 1 | 170 |
| 3 | 三郎 | 田中 | 1 | 185 |
| id | first_name | last_name | department_id | height |
|---|---|---|---|---|
| 3 | 三郎 | 田中 | 1 | 185 |
| 1 | 一郎 | 山田 | 1 | 170 |
Select(条件, 表示順)のように、第2引数に表示順を指定します。
以下のようにSQLと同じような要領で指定します。
'身長(昇順)、id(昇順)
rows = dt.Select("department_id = '1'", "height, id")
'身長(降順)
rows = dt.Select("department_id = '1'", "height DESC")