投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/8/28 10:55:30
> DatatableからListに値を変換させる処理
DataTable は「行」と「列」をもつ 2 次元情報ですが、List(Of ) は 1 次元情報ですよね。

Dim x As List(Of Object()) や
Dim y As List(Of List(Of String)) や
Dim z() As List(Of String)
などの構造で良いのであれば、たとえばこう書けます。
sample(3)(0) が、「yourTable.Rows(3)(0)」相当になります。(4行目1列目の値取得)

Dim sample1 As List(Of Object()) = yourTable.AsEnumerable().Select(Function(r) r.ItemArray).ToList()
Dim sample2 As List(Of List(Of String)) = yourTable.AsEnumerable().Select(Function(r) r.ItemArray.Select(AddressOf Convert.ToString).ToList()).ToList()
Dim sample3() As List(Of Object) = yourTable.AsEnumerable().Select(Function(r) r.ItemArray.ToList()).ToArray()



行列を逆にして sample("COL1")(2) などにしたいなら、たとえばこんな感じ。(COL1 列の 3 行目の値取得)
Dim sample4 As Dictionary(Of String, List(Of Object)) = yourTable.Columns.Cast(Of DataColumn)().ToDictionary(Function(r) r.ColumnName, Function(r) New List(Of Object)())
For Each r As DataRow In yourTable.Rows
    For Each col In sample4.Keys
        sample4(col).Add(r(col))
    Next
Next