You need to enable JavaScript to run this app. VB.NET如何按产品名称分组对象列表并将材质属性合并为数组
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET如何按产品名称分组对象列表并将材质属性合并为数组

VB.NET 合并同产品多材质SQL记录实现方案

你现有代码存在两个核心错误:

  • 无需先将单条DataRow转为Product对象:单条SQL记录仅包含单个材质值,无法直接初始化Product类的materials数组属性,此步骤会产生空值或报错
  • 分组后构造Product对象时遗漏了dimension、weight、price三个字段的赋值,且取材质的逻辑错误,应该从原始DataRow中读取material字段值

正确实现代码

' 数据库查询部分保持不变,补充DataTable初始化
Using conn As SqlConnection = New SqlConnection("Data source=db;Initial Catalog=ProductData;Integrated security=True")
    Dim cmd As New SqlCommand("select * from dbo.Product_data_db", conn)
    Dim adapter As New SqlDataAdapter(cmd)
    Dim table As New DataTable()
    adapter.Fill(table)
End Using

' 分组合并逻辑修改如下
Dim products As List(Of Product) = table.AsEnumerable() _
    .GroupBy(Function(row) row.Field(Of String)("name")) _
    .Select(Function(group) New Product With {
        .name = group.Key,
        ' 同产品非材质字段完全一致,取分组第一条记录的值即可
        .dimension = group.First().Field(Of Integer)("dimension"),
        .weight = group.First().Field(Of Double)("weight"),
        .price = group.First().Field(Of Double)("price"),
        ' 提取分组内所有材质字段转成字符串数组
        .materials = group.Select(Function(row) row.Field(Of String)("material")).ToArray()
    }).ToList()

实现说明

  • 直接对DataTable的行数据按name字段分组,避免中间多余的Product对象转换
  • 利用同产品非材质字段完全一致的特性,取分组第一条记录的对应值赋值即可
  • 遍历分组内所有行,提取material字段值转为数组,赋值给Product的materials属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 09:24:03