VB.NET遍历DataTable遇编译错误,求正确条件遍历实现方法
解决DataTable遍历与LINQ使用的问题
嘿,我来帮你搞定这个报错和遍历需求!
首先,你遇到的'Item' is not a member of DataRow()错误原因很明确:dt.Select("Criteria='Criteria 1'")返回的是符合条件的DataRow数组,不是单个DataRow对象。你直接对数组调用.Item("Option"),数组本身没有这个成员,自然会报错。
修复原代码的方案
先优化一下你的代码逻辑——原代码里在遍历整个DataTable的循环里重复执行查询,会浪费很多性能。我们可以先把符合条件的行取出来,再遍历这个结果集:
Dim dt As DataTable = StoredProcedure ' 一次性取出所有符合Criteria 1的行,避免重复查询 Dim sCriteriaOneRows As DataRow() = dt.Select("Criteria='Criteria 1'") ' 遍历符合条件的每一行 For Each row As DataRow In sCriteriaOneRows ' 对单个DataRow调用.Item获取字段值 Item.Append("<p>" + CStr(row.Item("Option")) + "</p>") Next
如果你的场景里确定Criteria 1只有一行数据,也可以直接用数组索引取第一行:
Dim sCriteriaOneRow As DataRow = dt.Select("Criteria='Criteria 1'").FirstOrDefault() If sCriteriaOneRow IsNot Nothing Then Item.Append("<p>" + CStr(sCriteriaOneRow.Item("Option")) + "</p>") End If
用LINQ实现更简洁的遍历
如果你想尝试LINQ,VB.NET里结合DataTable.AsEnumerable()可以很方便地实现筛选和遍历,记得先引用System.Linq和System.Data.DataSetExtensions命名空间:
Dim dt As DataTable = StoredProcedure ' 用LINQ筛选出Criteria为Criteria 1的行 Dim criteriaOneRows = From row In dt.AsEnumerable() Where row.Field(Of String)("Criteria") = "Criteria 1" Select row ' 遍历筛选结果 For Each row In criteriaOneRows ' Field(Of T)方法可以直接指定字段类型,比CStr更安全 Item.Append("<p>" + row.Field(Of String)("Option") + "</p>") Next
LINQ的写法更直观,而且Field(Of T)能帮你做类型检查,避免隐式转换带来的错误,可读性也更强。
内容的提问来源于stack exchange,提问作者cpt-crunchy
相关产品推荐
相关产品推荐

