【问题标题】:Using a List to Fetch Columns from a DataTable使用列表从数据表中获取列
【发布时间】:2021-06-02 00:27:53
【问题描述】:

我可以成功地从 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()

【问题讨论】:

  • Dim tarCols = {"x2", "x3", "x4"} : Dim rows = dt.DefaultView.ToTable(False, tarCols).AsEnumerable().ToArray().
  • 谢谢,但这会产生列名列表。相反,我需要一个由三列数据填充的锯齿状数组()()。基本思想是连接一个字符串并将其注入到 Select 命令中,以获取指定列的数据。基本问题是 Function(b) {b("x1"), b("x2"), b("x3")} 不能用字符串或对象替换。现在,我可以使用 DataView,但我必须遍历行和列。寻找一种将字符串或列表(字符串)填充到 Select() 中的方法。

标签: vb.net select datatables toarray


【解决方案1】:

你可以替换:

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 的值并创建该锯齿状数组。

【讨论】:

    【解决方案2】:

    我创建了一个DataTable 并在Form.Load 中添加了几行

    Cols 是我想要在新的DataTable 中的列名的String 数组。这里的神奇之处在于.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
    

    【讨论】:

    • 谢谢,这将有助于加载带有选定列的 DataGridView。
    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多