比较 2 个表列名称,如果不存在,请添加它



我有一个关于比较两个表的问题。如果表1中不包含表2中的列名,请添加具有值的列。所以我用代码做了这件事,但不知道为什么它会给我一个错误,即列已经属于表1。我在这里做错了什么?有更好的方法吗?

示例,表1:

Name   LastName
a       aa
b       bb

表2:

Name    Product
s       dd
a       ss

结果:

Name   LastName    Product
a       aa         dd
b       bb         ss      

我的代码:

for (int i = 0; i < excelTb2.Columns.Count; i++)
{
for (int j = 0; j < Temp.Columns.Count; j++ )
{
if (Temp.Columns[j].ColumnName.ToString() != excelTb2.Columns[i].ColumnName.ToString())
{
excelTb2.Columns.Add(Temp.Columns[j].ColumnName.ToString());
for (int ok = 0; ok < 2; ok++)
{
excelTb2.Rows[ok][Temp.Columns[j].ColumnName] = Temp.Rows[ok][j];
}
}
}
}

Columns是一个集合。您可以使用Contains 检查列名是否已经存在

for (int j = 0; j < Temp.Columns.Count; j++ )
{
if(!excelTb2.Columns.Contains(Temp.Columns[j].ColumnName))
{
excelTb2.Columns.Add(Temp.Columns[j].ColumnName.ToString());
...
}
}

这将消除嵌套循环的需要,这是导致错误的主要原因

您可以使用此Merge方法,该方法合并两个DataTables的架构并连接行索引上的数据(如果两个表都包含一列,则表1的数据将按请求获取):

public static DataTable MergeOnRowIndex(DataTable table1, DataTable table2)
{
var data = table1.AsEnumerable()
.Select((r, i) => new
{
Row1 = r,
Row2 = i >= table2.Rows.Count ? null : table2.Rows[i]
});
DataTable table3 = new DataTable();
foreach (DataColumn col in table1.Columns)
{
table3.Columns.Add(col.ColumnName, col.DataType);
}
foreach(DataColumn col in table2.Columns)
if(!table3.Columns.Contains(col.ColumnName))
table3.Columns.Add(col.ColumnName, col.DataType);
if(data.Any())
{
foreach(var x in data)
{
var newRow = table3.Rows.Add();
for (int i = 0; i < table1.Columns.Count; i++)
{
newRow[i] = x.Row1.ItemArray[i];
}
if (x.Row2 != null)
{
for (int i = table1.Columns.Count; i < table3.Columns.Count; i++)
{
DataColumn currentColumn = table3.Columns[i];
newRow[currentColumn.ColumnName] = x.Row2[currentColumn.ColumnName];
}
}
}
}
return table3;
}

在这里,我使用了一种方法来获得您想要的样本数据结果:

var table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("LastName");
var otherTable = new DataTable();
otherTable.Columns.Add("Name");
otherTable.Columns.Add("Product");
table.Rows.Add("a","aa");
table.Rows.Add("b","bb");
otherTable.Rows.Add("s","dd");
otherTable.Rows.Add("a","ss");
DataTable result = MergeOnRowIndex(table, otherTable);

相关内容

  • 没有找到相关文章