You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ对DataTable进行列筛选而非仅筛选行数据

实现方案

完全可以通过LINQ实现,操作分为两步:先用LINQ筛选出符合要求的列集合,再基于选中的列构建新的DataTable即可。

步骤1:筛选目标列

首先从原DataTable的列集合中匹配你需要保留的列:

' 筛选要保留的列:ID、Name + 列名为数字且数值大于2的列
Dim targetColumns = dtMyData.Columns.Cast(Of DataColumn)() _
                    .Where(Function(col)
                        Return {"ID", "Name"}.Contains(col.ColumnName) OrElse
                               (Integer.TryParse(col.ColumnName, Nothing) AndAlso Integer.Parse(col.ColumnName) > 2)
                    End Function).ToList()

步骤2:构建新DataTable

将选中的列和原表数据导入新表:

Dim newDt As New DataTable()
' 添加选中的列结构
For Each col As DataColumn In targetColumns
    newDt.Columns.Add(col.ColumnName, col.DataType)
Next
' 导入原表数据
For Each row As DataRow In dtMyData.AsEnumerable()
    Dim newRow = newDt.NewRow()
    For Each col As DataColumn In targetColumns
        newRow(col.ColumnName) = row(col.ColumnName)
    Next
    newDt.Rows.Add(newRow)
Next

如果需要和你之前的行过滤逻辑结合,只要把导入的行替换为过滤后的结果即可:

' 先过滤Name为Frank的行
Dim filteredRows = dtMyData.AsEnumerable().Where(Function(f) f("Name").ToString().Equals("Frank")).ToList()
' 后续导入数据时遍历filteredRows即可

内容的提问来源于stack exchange,提问作者Conor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:48:07