如何使用LinQ向DataTable添加指定模板多行?代码问题求助
问题分析与代码修正
你的代码存在两个核心问题:
ra1被定义为二维数组(包含两个一维数组的数组),但DataTable.Rows.Add()方法需要传入一维数组,直接传递ra1会导致类型不匹配。- 逻辑错误:当行状态为
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
相关产品推荐
相关产品推荐

