这是一个C#Windows应用程序。
我在内存中有2个数据表,我称之为GoodTable
和BadTable
。行数和列数相同,列名也是相同的。 BadTable
中的所有行在大多数列中都包含错误数据。我需要循环遍历BadTable
中的所有行,并使用GoodTable
中匹配行中的数据替换所有列中的数据。但是,在进行更新时我需要跳过2个列名称,我将其称为SkipColumn1
和SkipColumn2
。
我尝试过嵌套for循环的嵌套foreach
循环的众多版本,以跟踪列数,我的结果就是整个地方。如果有任何数据库循环忍者,我将非常感谢帮助。
答案 0 :(得分:0)
这样的事情:
var goodTable = new DataTable();
var badTable = new DataTable();
// some initialization code (add columns, fill with data)...
var columnNames = goodTable
.Columns
.Cast<DataColumn>()
.Where(column => column.ColumnName != "SkipColumn1" && column.ColumnName != "SkipColumn2")
.Select(column => column.ColumnName)
.ToArray();
for (var i = 0; i < goodTable.Rows.Count; i++)
{
foreach (var columnName in columnNames)
{
badTable.Rows[i][columnName] = goodTable.Rows[i][columnName];
}
}
答案 1 :(得分:0)
这是我接受的答案,因为在我看来,这是最干净,最简单的。
for (var i = 0; i < GoodDT.Rows.Count; i++)
{
for (var x = 0; x < GoodDT.Columns.Count; x++)
{
if (BadDT.Columns[x].ColumnName != "skip1" && BadDT.Columns[x].ColumnName != "skip2")
{
BadDT.Rows[i][x] = GoodDT.Rows[i][x];
}
}
}