数据库循环算法让我发疯

时间:2013-04-04 12:23:14

标签: c# loops datatable

这是一个C#Windows应用程序。

我在内存中有2个数据表,我称之为GoodTableBadTable。行数和列数相同,列名也是相同的。 BadTable中的所有行在大多数列中都包含错误数据。我需要循环遍历BadTable中的所有行,并使用GoodTable中匹配行中的数据替换所有列中的数据。但是,在进行更新时我需要跳过2个列名称,我将其称为SkipColumn1SkipColumn2

我尝试过嵌套for循环的嵌套foreach循环的众多版本,以跟踪列数,我的结果就是整个地方。如果有任何数据库循环忍者,我将非常感谢帮助。

2 个答案:

答案 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];
        }
    }
}