VB.NET DataTableの列の値を配列に変換する
VB.NET
でDataTable
の指定した列の値を配列に変換して取得したい場合があります。
ID | NAME |
---|---|
1 | りんご |
2 | ばなな |
3 | みかん |
4 | いちご |
指定した列を配列にしたい
{"りんご", "ばなな", "みかん", "いちご"}
For Each
などで1行づつループで配列に追加していく方法もありますが、匿名関数(無名関数/ラムダ式)を使用すれば簡単に取得できます。
Dim dt As DataTable '例のテーブル
'配列で取得
Dim arr As String() = dt.AsEnumerable().Select(Function(row) row("NAME")).ToArray()
'または
Dim arr As String() = dt.Rows.Cast(Of DataRow).Select(Function(row) row("NAME")).ToArray()
'{"りんご", "ばなな", "みかん", "いちご"}
AsEnumerable
の代わりにRows.Cast(Of DataRow)
でも同じように取得できます。
Dim dt As DataTable '例のテーブル
'配列で取得
Dim arr As String() = dt.Rows.Cast(Of DataRow).Select(Function(row) row("NAME")).ToArray()
'{"りんご", "ばなな", "みかん", "いちご"}
Select()
の中に記載した匿名関数の処理がDataTable
の1行ごとに行われます。
匿名関数の処理は複数行で記載できるため、自由にデータを加工できます。
Dim dt As DataTable '例のテーブル
'配列で取得
Dim arr As String() = dt.AsEnumerable().Select(Function(row)
If row("ID").ToString = "2" Then
'ばななの場合は空文字にする
Return ""
End If
Return row("NAME").ToString
End Function).ToArray()
'{"りんご", "", "みかん", "いちご"}
DataTable
に対してAsEnumerable
を使用するにはSystem.Data.DataSetExtensions
をプロジェクトの参照に追加する必要があります。
System.Data.DataSetExtensions
は.NET framework 3.5以上で使用できます。
VB.NET 配列をカンマ区切りの文字列に変換するで紹介した方法と組み合わせれば、SQL
などで取得したデータをカンマ区切りやスラッシュ区切りの文字列に簡単に変換することができます。
カンマ区切りの文字列に変換
Dim dt As DataTable '例のテーブル
'配列で取得
Dim str As String = String.Join(",", dt.AsEnumerable().Select(Function(row) row("NAME")).ToArray())
Console.WriteLine(str)
'出力結果
'りんご,ばなな,みかん,いちご