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)
'出力結果
'りんご,ばなな,みかん,いちご