VB.NET中如何将DataTable的单列数据作为DataTable参数传入函数
错误原因
- 你传入的
dt.Rows.Item("Id")不符合参数类型要求:该表达式实际获取的是单行Id列的字段值,返回类型为Object,和函数要求的DataTable类型完全不匹配,因此无法运行。 - “剔除某列后剩下的就是DataTable”是认知误区:你没有对原DataTable执行结构复制、列筛选的操作,只是直接读取行内字段,不可能自动生成仅包含Id列的DataTable对象。
解决方法
方法1:使用DataView.ToTable(最简方案)
.NET内置方法可以直接筛选需要保留的列,无需手动遍历行:
' 生成仅包含Id列的新DataTable Dim idOnlyTable As DataTable = dt.DefaultView.ToTable(False, "Id") ' 传入目标函数 myfunction(idOnlyTable) Public Function myfunction(dt As DataTable) ' 原有业务代码 End Function
ToTable的第一个参数为是否对数据去重,第二个参数传入需要保留的列名,仅填"Id"就会生成只有Id列的新表,同时会自动复制原表的5行Id数据。
方法2:手动构造新DataTable(适合需要自定义处理的场景)
如果需要对数据做额外加工,可以手动建表复制数据:
' 新建仅含Id列的空表,类型和原表Id列保持一致 Dim idOnlyTable As New DataTable() idOnlyTable.Columns.Add("Id", dt.Columns("Id").DataType) ' 遍历原表复制Id列数据 For Each row As DataRow In dt.Rows Dim newRow = idOnlyTable.NewRow() newRow("Id") = row("Id") idOnlyTable.Rows.Add(newRow) Next ' 传入目标函数 myfunction(idOnlyTable)
注意:两种方法生成的都是独立的新DataTable,不会修改你原来包含Name列的原表数据。
内容的提问来源于stack exchange,提问作者Jen K
相关产品推荐
相关产品推荐

