如何使用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
相关产品推荐
相关产品推荐

