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

如何使用LinQ向DataTable添加指定模板多行?代码问题求助

问题分析与代码修正

你的代码存在两个核心问题:

  1. ra1 被定义为二维数组(包含两个一维数组的数组),但 DataTable.Rows.Add() 方法需要传入一维数组,直接传递 ra1 会导致类型不匹配。
  2. 逻辑错误:当行状态为 Valid 时需要添加两行数据,但你用 If 语句只能返回单个结果,无法实现一行拆分为两行的展开需求。

修正后的代码

方案1:直接生成目标DataTable(推荐)

如果 dtResult 的结构和模板一致,可以直接通过LINQ生成结果并赋值:

dtResult = (From row1 In dtMaster.AsEnumerable()
            Where row1("Status").ToString() = "Valid"
            ' 为每个Valid行生成第一行数据
            Select New Object() {"1", "Ms. Julie", row1("Address")}
            Union
            ' 为每个Valid行生成第二行数据
            Select New Object() {"2", row1("Name"), row1("Address")}
           ).CopyToDataTable()

方案2:逐行添加到已存在的dtResult

如果 dtResult 已提前创建好结构,需要保留原有数据时,可通过循环添加:

' 先过滤出Status为Valid的行
For Each row1 In dtMaster.AsEnumerable().Where(Function(r) r("Status").ToString() = "Valid")
    ' 添加模板第一行
    dtResult.Rows.Add({"1", "Ms. Julie", row1("Address")})
    ' 添加模板第二行
    dtResult.Rows.Add({"2", row1("Name"), row1("Address")})
Next

补充说明

  • 方案1通过 Union 合并每个Valid行对应的两行数据,直接生成目标DataTable,代码更简洁高效。
  • 原代码中处理Invalid行的逻辑在预期结果中未体现,因此修正时直接过滤了Invalid行;若需要保留Invalid行的原始数据,可在方案2中添加Else分支处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:25:20