VB.NET DataTable Select 値の取得

DataTableのデータから
指定された条件に合うデータを取得する方法です。

DataTableから条件に合ったデータを取得する

'テーブル作成
Dim dt As New DataTable

'列項目を作成
dt.Columns.Add("No", Type.GetType("System.Int32"))
dt.Columns.Add("商品名")
dt.Columns.Add("製造元")
dt.Columns.Add("価格", Type.GetType("System.Int32"))

'行データの登録

'1行目
Dim row As DataRow
row = dt.NewRow
row("No") = 50
row("商品名") = "商品A"
row("製造元") = "製造元A"
row("価格") = 1000
dt.Rows.Add(row)

'2行目
row = dt.NewRow
row("No") = 100
row("商品名") = "商品B"
row("製造元") = "製造元B"
row("価格") = 1000
dt.Rows.Add(row)

'3行目
row = dt.NewRow
row("No") = 30
row("商品名") = "商品C"
row("製造元") = "製造元B"
row("価格") = 10000
dt.Rows.Add(row)

'データの確定
dt.AcceptChanges()

'条件に合うデータの取得
Dim ret As DataRow()
ret = dt.Select("製造元 = '製造元B'")

'データテーブルの内容を表示
Console.WriteLine("No" & " " & "商品名" & " " & "製造元" & " " & "価格")
For Each d As DataRow In ret
	Console.WriteLine(d("No") &
					  " " & d("商品名") &
					  " " & d("製造元") &
					  " " & d("価格"))
Next
No 商品名 製造元 価格
100 商品B 製造元B 1000
30 商品C 製造元B 10000

DataTableから条件に合ったデータを取り出したい場合には、
Selectメソッドを使います。

引数に条件を書き、文字列で指定します。
この中で文字列を扱う場合には’シングルクォーテーションを使います。

条件は、
この例の場合だと、製造元が”製造元B”のデータを取得します。

取得されたデータは複数件になる可能性があるので、
DataRow配列で受け取ります。

並べ替えたい時は

表示されたデータを見てみると、Noの順で並んでいません。

並び替えたい場合は、
Selectメソッドの第2引数に、並び替え基準となるキーを指定します。

ret = dt.Select("製造元 = '製造元B'", "No")   '昇順
ret = dt.Select("製造元 = '製造元B'", "No desc")   '降順

この場合は、Noを基準に昇順か降順か指定できます。
何も指定しなければ、昇順、descと書けば降順になります。

注意する点は、DataTableの列設定時に、
列のデータ型を数値型に設定しておかなければならない。と言う事です。

dt.Columns.Add("No", Type.GetType("System.Int32")) 'データ型を数値型に指定
dt.Columns.Add("No")  '何も指定しないとString型になってしまう

列のデータ型がString型になっていると、
昇順、降順の並べ替えがうまく機能しませんので、注意が必要です。

スポンサーリンク

複数の条件を設定する

Selectメソッドで、複数の条件も指定できます。

ret = dt.Select("製造元='製造元B' and 価格=1000")
No 商品名 製造元 価格
100 商品B 製造元B 1000

この例の場合は、製造元が製造元Bで、
さらに、価格が1000のデータが抽出されます。


以上、DataTableからデータを取得する方法でした。