我有两个具有相同模式,业务伙伴和地址的数据表。我试图以特定格式组合它们以便导入另一个系统。
基本上,我希望输出如下:
以下是我尝试的最新代码:
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);
}
}
似乎陷入了无限循环,但我不明白为什么。有没有更好的方法来解决这个问题?
答案 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
...