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

VB.NET中如何遍历DataSet为单对象的多List属性赋值?

解决方案

嘿,这事儿不难,我给你捋清楚步骤和代码:

首先看你的需求:DataSet里是同一个EmpId的多条记录,要把这些记录的Questions字段收集到MyClass的Question列表里,同时给Id和EmpId赋值。

核心思路

  1. 先确保DataSet里有有效数据(避免空引用异常)
  2. 初始化MyClass对象,把公共的EmpId(你的示例里都是6)和Id(这里我用第一条记录的Id,你可以根据需求调整规则)赋值
  3. 遍历DataSet里的每一行,把每行的Questions字符串添加到Question列表中

VB.NET 代码实现

' 假设你的DataSet名为ds
If ds IsNot Nothing AndAlso ds.Tables.Count > 0 AndAlso ds.Tables(0).Rows.Count > 0 Then
    ' 初始化MyClass对象
    Dim myObj As New MyClass()
    
    ' 取第一条记录的Id和EmpId(示例中所有记录EmpId一致,Id可按需调整规则)
    myObj.Id = Convert.ToInt32(ds.Tables(0).Rows(0)("Id"))
    myObj.EmpId = Convert.ToInt32(ds.Tables(0).Rows(0)("EmpId"))
    ' 先初始化Question列表,避免空引用
    myObj.Question = New List(Of String)()
    
    ' 遍历所有行,收集Questions内容
    For Each row As DataRow In ds.Tables(0).Rows
        ' 处理字段可能为空的情况,避免报错
        If row("Questions") IsNot DBNull.Value Then
            Dim questionStr As String = row("Questions").ToString()
            If Not String.IsNullOrEmpty(questionStr) Then
                myObj.Question.Add(questionStr)
            End If
        End If
    Next
End If

扩展:如果DataSet里有多个不同EmpId的记录

如果你的DataSet里可能存在多组不同EmpId的数据,需要按EmpId分组创建多个MyClass对象,可以用LINQ简化处理:

If ds IsNot Nothing AndAlso ds.Tables.Count > 0 AndAlso ds.Tables(0).Rows.Count > 0 Then
    ' 将DataTable转换为可枚举集合
    Dim rows = ds.Tables(0).AsEnumerable()
    
    ' 按EmpId分组
    Dim groupedData = rows.GroupBy(Function(r) r.Field(Of Integer)("EmpId"))
    
    ' 遍历分组,生成每个EmpId对应的MyClass对象
    Dim myClassList As New List(Of MyClass)()
    For Each group In groupedData
        Dim myObj As New MyClass()
        ' 取分组内第一条记录的Id,你也可以换成其他规则比如最大值
        myObj.Id = group.First().Field(Of Integer)("Id")
        myObj.EmpId = group.Key
        ' 直接提取分组内所有Questions到列表
        myObj.Question = group.Select(Function(r) 
            If r("Questions") Is DBNull.Value Then "" Else r.Field(Of String)("Questions")
        End Function).ToList()
        
        myClassList.Add(myObj)
    Next
End If

注意事项

  • 一定要处理DBNull的情况:如果数据库中Questions字段允许为空,直接转换会抛出异常,所以先判断非空再处理
  • 关于Id的赋值规则:如果你的业务里不需要这个字段或者需要其他逻辑(比如取分组内的最大Id),可以自行调整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:07:03