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")