Vb.net 使用列表从数据表中获取列

Vb.net 使用列表从数据表中获取列,vb.net,select,datatables,toarray,Vb.net,Select,Datatables,Toarray,我可以使用例如 Dim arrayOfObjects()() As Object = DT.AsEnumerable().Select(Function(b) {b("x1"), b("x2"), b("x3")}).ToArray() 但是,我的大多数获取都会涉及不同的列组合,因此在本例中,我将使用列名的列表或字符串数组,然后更愿意基于列表或数组获取列。那怎么办呢?我还没有见过可以将字段名串联在一个字符串中,并将其插入Select命

我可以使用例如

Dim arrayOfObjects()() As Object = DT.AsEnumerable().Select(Function(b) {b("x1"), b("x2"), b("x3")}).ToArray()
但是,我的大多数获取都会涉及不同的列组合,因此在本例中,我将使用列名的列表或字符串数组,然后更愿意基于列表或数组获取列。那怎么办呢?我还没有见过可以将字段名串联在一个字符串中,并将其插入Select命令以获取的用例

我设想使用类似于

Dim mystr As String = "x1,x2,x3" 

Dim arrayOfObjects()() As Object = DT.AsEnumerable().Select(mystr}).ToArray()

我创建了一个
DataTable
,并在
表单中添加了几行。Load

Cols
是我想要在新的
DataTable
中使用的一个
字符串
列名数组。这里的神奇之处在于这里记录的
.ToTable
方法

您可以替换:

Dim arrayOfObjects()()As Object=DT.AsEnumerable()。选择(函数(b){b(“x1”)、b(“x2”)、b(“x3”)})。ToArray()
与:

Dim mystr As String=“x1,x2,x3”
Dim tarCols As String()=mystr.Split({“,”},StringSplitOptions.RemoveEmptyEntries)
“捷径
'Dim tarCols={“x1”、“x2”、“x3”}
Dim arrayOfObjects As Object()=dt.DefaultView.ToTable(False,tarCols)。
AsEnumerable().Select(函数(x)x.ItemArray.ToArray())

提取任何给定的一个或多个
DataColumn
的值并创建该锯齿数组。

Dim tarCols={“x2”、“x3”、“x4”}:Dim rows=dt.DefaultView.ToTable(False,tarCols).AsEnumerable().ToArray()
。谢谢,但这会生成一个列名列表。相反,我需要一个锯齿状数组(),其中填充了来自三列的数据。基本思想是连接一个字符串并以某种方式将其注入Select命令,以获取指定列的数据。基本问题是
函数(b){b(“x1”)、b(“x2”)、b(“x3”)}
不能用字符串或对象替换。现在,我用DataView处理这个问题,但是我必须循环行和列。正在寻找将字符串或(字符串的)列表填充到Select()中的方法。谢谢,这将有助于加载包含选定列的DataGridView。
Private dt As New DataTable

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    With dt.Columns
        .Add("Number")
        .Add("Name")
        .Add("LastName")
    End With
    dt.Rows.Add({"Mary", "Ruth", "Morrison"})
    dt.Rows.Add("William", "James", "Patrick")
    DataGridView1.DataSource = dt
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Cols = {"Number", "LastName"}
    Dim rows = dt.DefaultView.ToTable(False, Cols)
    DataGridView1.DataSource = rows
End Sub