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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:50:28