2012-01-17 8 views
0

SQL Serverでは、一時的なインポートテーブル( 'インポート')に多数の列と別のテーブル( 'Production')カラム数が多く、のカラム数が同じである場合は、(すべてではありません)、というように、同じ名前のカラムの値を(処理なし)に書き込むだけです。同じデータベースで、両方のテーブルの名前が同じ列には同じ型があります。LINQを使用して1つのSQL Serverテーブルから別のテーブルに同じ名前の列に値をコピーする方法

は通常、我々はこのようにそれを実行します。多くの列がある場合に迷惑と何とか冗長だ

// Lots and lots of columns copied without processing 
Production.ColumnA = Import.ColumnA; 
Production.ColumnB = Import.ColumnB; 
Production.ColumnC = Import.ColumnC; 
// [...] 

// Some with processing 
Production.ColumnQ1 = DoSomething(Import.ColumnQ2); 

を。何この擬似コードのように、自動的にそれらの均等という名前の列をコピーするための最良の方法だろう。

foreach(var importRow in ImportRows) 
    foreach(Column col in Production.Columns) 
     if(Import.Columns.Contains(col.Name)) newProductionRow[col] = importRow[col]; 

(1がインデックス付きのDataTableを使用して何ができるかと非常に似ていますが、我々はそれをしたくありませんここでは)

答えて

2

このブログで説明したように、オブジェクトから別のオブジェクトにコピーするためにリフレクションを使用してみてくださいすることができます。http://goneale.com/2009/02/16/cloning-object-properties-via-reflection/

あなたはたくさんのコピーする必要があるテーブルの異なるタイプのを持っている場合は、あなたがにジェネリックを追加することができますミックスするので、1つの "コピー"機能を作成するだけです。

+0

+1は完璧な答えと素晴らしいリンクを起動します。プロパティの複製は、この種の問題を処理する最善の方法です。 –

+0

私にも良く見えます。ありがとう! – Olaf

関連する問題