从两个

时间:2015-07-09 16:28:43

标签: c#

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

基本上,我希望输出如下:

  • 业务合作伙伴
  • 所有相关地址
  • 下一位业务合作伙伴
  • 所有相关地址

以下是我尝试的最新代码:

            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);
                }
            }

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

2 个答案:

答案 0 :(得分:1)

你的方法很可怕。但如果你坚持走这条路,这应该有效:

 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);
                }
            }

答案 1 :(得分:0)

好像......

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

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

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

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

更好的方法可能是使用LINQ。如果您对AsEnumerable()使用DataTable扩展名,则可以使用LINQ查询AddressDt ...

LINQ query on a DataTable