-2

これは C# Windows アプリケーションです。

メモリ内に 2 つのデータテーブルがあり、それらGoodTableを and と呼びますBadTable。行と列の数は同じで、列名も同じです。のすべての行のBadTableほとんどの列に不良データがあります。のすべての行をループしてBadTable、すべての列のデータを の一致する行のデータに置き換える必要がありますGoodTable。ただし、更新を行うときにスキップする必要がある列名が 2 つありSkipColumn1ますSkipColumn2

foreach列数を追跡するためにネストされたforループを使用してネストされたループの多数のバージョンを試しましたが、結果はいたるところにあります。忍者をループしているデータベースがあれば、助けていただければ幸いです。

4

2 に答える 2

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];
            }
        }
于 2013-04-04T12:32:27.743 に答える
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];
        }
    }
}
于 2013-04-05T15:08:34.517 に答える