我已经研究过datatable.merge()和LINQ,但不确定Merge是否适用于这种情况,而我现在才开始了解LINQ。
在我的项目中,我必须将未知数量的列加入现有数据集。
我目前正在查询数据库并获取必须创建的每个列的记录,然后是与新列和现有数据集匹配的项目表和ID。
所以结构是这样的:
foreach(Datarow row in newColumns.rows)
{
originialDataTable.Columns.Add("\"Supplier: " + row["Supplier"] + "\r\n" +
"ETA: " + row["ETADate"] + "\r\n" +
"Shipped: " + row["ShipDate"] + "\r\n" +
"Cartons: " + row["ContainerQty"] + "\r\n" +
"Delivery Mode: " + row["ShipType"] + "\r\n" +
"Container number: " + row["ContainerNumber"] + "\"");
for (int c = 0; c < cmDataTable.Rows.Count; c++)
{
for (int b = 0; b < originialDataTable.Rows.Count; b++)
{
string containerItem = cmDataTable.Rows[c]["POnumber"].ToString() + cmDataTable.Rows[c]["ItemNumber"].ToString();
string poItem = originialDataTable.Rows[b]["ponumber"].ToString() + originialDataTable.Rows[b]["stocknumber"];
if (containerItem == poItem && cmID == cmDataTable.Rows[c]["CMID"].ToString())
{
originialDataTable.Rows[b][position] = cmDataTable.Rows[c][2];
}
}
}
}
我知道我应该将for循环更改为foreach,但我不确定上述代码的质量。在此先感谢您的帮助。
答案 0 :(得分:0)
关于要求并不完全清楚,但尝试了一些事情,请查看以下代码:
DataTable dt = new DataTable(); // Create DataTable
dt.Columns.Add("A", typeof(int)); // Add a Column
dt.Columns["A"].DefaultValue = 5; // Set Column default value
dt.Rows.Add(3); // Add a DataRow
DataTable dt1 = new DataTable(); // Create DataTable
dt1.Columns.Add("C", typeof(int)); // Add a Column
dt1.Columns["C"].DefaultValue = 5; // Set Column default value
dt1.Rows.Add(3); // Add a DataRow
dt.Merge(dt1); // Merge dt1 into dt
您可以在此类代码中找到的挑战即使您希望合并的DataTable包含two columns and one row
,它实际上也会包含2 rows
,其中每个DataTable的合并列都将填充默认值(尝试运行代码以理解),如果我不提供DefaultValue
,那么它填写Null,以下是上述代码的结果:
A C
3 5
5 3
现在我的理解是这个结果不可取,然后我尝试使用一些Linq Join,Full Outer Join来弄清楚我们是否可以有一个解决方案,但似乎也不太可能因为在一个Join它遍历所有行和与上面的Merge类似,为所有不存在的行添加默认值。
我能想到的唯一解决方案是: