从两个数据表创建一个数据表

本文关键字:数据表 一个 创建 两个 | 更新日期: 2023-09-27 18:01:58

我有两个具有相同模式、业务伙伴和地址的数据表。我想把它们组合成一个特定的格式,以便导入到另一个系统。

基本上,我希望输出如下所示:
  • 商业伙伴
  • 所有关联地址
  • 下一个业务合作伙伴
  • 所有关联地址

这是我正在尝试的最新代码:

            var finalDt = BpDt.Clone();
            foreach(DataRow BpRow in BpDt.Rows)
            {
                finalDt.ImportRow(BpRow);
                foreach(DataRow AddressRow in AddressDt.Rows)
                {
                    if(Convert.ToString(BpRow["id"]).Equals(Convert.ToString(BpRow["id"])))
                    finalDt.ImportRow(AddressRow);
                }
            }

它似乎陷入了一个无限循环,但我不明白为什么。有更好的方法来解决这个问题吗?

从两个数据表创建一个数据表

你的方法太糟糕了。但是,如果你坚持这样做,这应该是可行的:

 var finalDt = BpDt.Clone();
            foreach(DataRow BpRow in BpDt.Rows)
            {
                finalDt.ImportRow(BpRow);
                foreach(DataRow AddressRow in AddressDt.Rows)
                {
                    if(Convert.ToString(BpRow["id"]).Equals(Convert.ToString(AddressRow["id"])))
                    finalDt.ImportRow(AddressRow);
                }
            }

看起来…

if(Convert.ToString(BpRow["id"]).Equals(Convert.ToString(BpRow["id"])))

总是true。所以你只需要为每个BpRow插入每个AddressRow。根据您的数据集大小,这可能需要很长时间。id的比较应该是这样吗?

if(Convert.ToString(AddressRow["id"]).Equals(Convert.ToString(BpRow["id"])))

从概念上讲,这类似于id字段上的连接。

一个更好的方法可能是使用LINQ。如果您使用DataTableAsEnumerable()扩展,您可以使用LINQ查询AddressDt… 数据表的LINQ查询