使用列表从数据表中获取列

Using a List to Fetch Columns from a DataTable

我可以成功地从 DataTable (DT) 中获取列 x1、x2 和 x3,例如使用

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 并在 Form.Load

中添加了几行

Cols 是一个 String 列名数组,我想要在新的 DataTable 中使用。这里的魔力在于 .ToTable 方法 MS Docs

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

您可以替换:

Dim arrayOfObjects()() As Object = DT.AsEnumerable().Select(Function(b) {b("x1"), b("x2"), b("x3")}).ToArray()

与:

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

Dim tarCols As String() = mystr.Split({","}, StringSplitOptions.RemoveEmptyEntries)

' Shortcut
' Dim tarCols = { "x1", "x2", "x3" }

Dim arrayOfObjects As Object()() = dt.DefaultView.ToTable(False, tarCols).
    AsEnumerable().Select(Function(x) x.ItemArray).ToArray()

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