2017-12-20 8 views
1

私は2つのデータテーブルを持っています。最初のテーブルの列はCを使用してデータテーブル内の特定の列を一度にコピーする

ABCDE

は、第二のテーブルの列は、私はすべての列のデータをコピーしたい

BCFDEG

されていますその名前が第2の表に存在する第1の表から削除する。

私の表はので、私は(唯一のスニペット)私はそのような何かをやっている列

によってそれが列

foreach (string colname in sourceColumnNames) 
    { 
     if (!targetColumnNames.Contains(colname)) continue; 
     // There are other steps as well 
     tRow[colname] = sRow[colname]; 
    } 

を割り当てたくないかなり大きいです。しかし、それは非常に最適化されていません。

私はItemArrayを使ってそれをしようとしています。だから、私はアレイ全体(必要な列のみ)を一度にコピーすることができます。 私の考えは、ソーステーブルとターゲットテーブルの間のカラム名を一致させて辞書に格納し、その辞書からアイテム配列を作ることです。

アウトはあなたがすべての行のための共通の列をチェックしているあなたの例に基づいて、各列

+0

を見てDataTable.Loadの詳細については

dataTable2.Load(dataTable1.CreateDataReader()); 

:それを行う方法の例?あなたは 'dataSource'にアクセスできると思いますか? – zcui93

+0

2番目のテーブルが必要ですか?...最初のテーブルをコピーし、列の名前を変更して削除するのはどうですか? – Ctznkane525

+0

一部の計算はソーステーブルで行われ、結果はターゲットテーブルに格納されます – Student

答えて

0

を経由して2つのデータテーブル間のspecfic列をコピーし、任意の他の最適な方法はあります。これらの列はすべての行で同じなので、これを一度行うだけです。ここではそれを解決するための私の考えは次のとおりです。

最初のステップは、表2に表1の列のマッピングを作成することです:

//Create a mapping 
List<Tuple<int, int>> columnMappings = new List<Tuple<int, int>>(); 
for (int dt1ColumnIndex = 0; dt1ColumnIndex < dt1.Columns.Count; dt1ColumnIndex++) 
{ 
    string columnName = dt1.Columns[dt1ColumnIndex].ColumnName; 
    if (dt2.Columns.Contains(columnName) == true) 
    { 
     int dt2ColumnIndex = dt2.Columns.IndexOf(columnName); 
     columnMappings.Add(new Tuple<int, int>(dt1ColumnIndex, dt2ColumnIndex)); 
    } 
} 

今、あなたは新しい行を作成する最初のテーブルのすべての行を反復処理することができます表2に:

//Add all rows from table 1 to table two based on the mapping 
foreach (DataRow dt1Row in dt1.Rows) 
{ 
    DataRow dt2Row = dt2.NewRow(); 
    foreach (Tuple<int, int> columnMapping in columnMappings) 
    { 
     dt2Row[columnMapping.Item2] = dt1Row[columnMapping.Item1]; 
    } 
    dt2.Rows.Add(dt2Row); 
} 
+0

と直接の関係はありません。私の方法から改善しました。しかし、それでも、プログラムは一致する各列を1つずつコピーします。 ItemArrayのようにまとめてコピーする方法はありますか? – Student

+0

'DataRow'は管理オブジェクトなので、直接コピーする方法はないと思います。 – Fruchtzwerg

1

DataTable.Loadメソッドを使用できます。ソース行を宛先テーブルにコピーするので、列マッピングについて心配する必要はありません。私はあなたがコピーしたいと思う理由の質問は推測here

+1

答えを説明し、関連するコードを投稿することをお勧めします。リンクを投稿するのはお勧めできません。 –

関連する問題