2017-08-24 26 views
-2

テーブルが2つあります。Cで2つのDataTableを合計でマージする方法

item_idが同じ数値列の合成行を使用して、それらを表にマージする必要があります。

テーブルの行数が多いため、ここで最も速い処理ソリューションが十分に判断されます。

表1:

item_id|item_name|qty|col1|col2|col3| 
=============================================== 
1  |apple |5 |xxx |xxx |xxx | 
2  |orange |10 |xxx |xxx |xxx | 
3  |tomato |7 |xxx |xxx |xxx | 

表2:

item_id|item_name|qty|col1|col2|col3| 
=============================================== 
1  |apple |5 |xxx |xxx |xxx | 
3  |tomato |5 |xxx |xxx |xxx | 
4  |squash |1 |xxx |xxx |xxx | 

===>表の結果:

item_id|item_name|qty|col1|col2|col3| 
=============================================== 
1  |apple |10 |xxx |xxx |xxx | (sum qty: 10) 
2  |orange |10 |xxx |xxx |xxx | 
3  |tomato |12 |xxx |xxx |xxx | (sum qty: 12) 
4  |squash |1 |xxx |xxx |xxx | 

はありがとうございます。その上

SELECT * FROM Table1 
UNION 
SELECT * FROM Table2 

と:

+1

何を試しましたか?いくつかのコードを表示する! – Fruchtzwerg

+2

[so]はフリーコード作成サービスではありません。 **あなた自身でコードを書くことを試みることが期待されます**。 [もっと研究をして](http://meta.stackoverflow.com/questions/261592)問題がある場合は**あなたが試したことを投稿することができます** **動作していないことの明確な説明**を提供し、** [mcve] **を提供します。私は良い質問と[完璧な質問]を読むことをお勧めします(http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)。また、[ツアー]も必ず行ってください。 – Igor

+0

最初にDataTableを使用しているのはなぜですか?強く型付けされたオブジェクトを使用していないのはなぜですか? – mason

答えて

0

最も簡単な解決策はUNIONを使用して、GROUP BYitem_idqtyフィールド上SUM機能を使用して、同様にされるだろう。次のように

C#でDataTableマージ操作を実装することができます。

table3 = Table1.Copy(); 
table3.Merge(Table2); 

結果table3またはLINQを使用して、その後のことができますループ。

(注:あなたの質問は一般的なものなので、回答も一般的なものです)。

希望すると、これが役立ちます。

+0

Alex Bellに感謝しますが、ここではC#で2つのDataTable、SQLではなく、このケースでUNIONを使用する方法があります。 –

+0

ようこそ。私の拡張答えを参照してください。 Rgds、 –

+0

@ XuanDung - 上のご意見から:「私は特定のソースコードではなく、問題の解決策を探しています。上記は十分です。 – Igor

0

私は決してC#datatableを使用しませんでしたが、単純なループでは必要なことはできません。

foreach(row1 in datatable1.Rows) 
{ 
    foreach(row2 in datatable2.Rows) 
    { 

     if (!datatable3.Rows.Contains(row1)) 
      datatable3.Rows.Add(row1) 

     if (!datatable3.Rows.Contains(row1)) 
      datatable3.Rows.Add(row1) 

     if (row1.id == row2.id) 
      datatable3.row.qty = row1.qty + row2.qty 
    } 
} 
0

2つのDataTableをvarまたはリストに配置すると、次のようにグループを作成できます。

var listadoTabla1 = new List<Table1> 
     { 
      new Table1{ item_id=1, item_name="apple", qty=5 }, 
      new Table1{ item_id=2, item_name="orange", qty=10 }, 
      new Table1{ item_id=3, item_name="tomato", qty=7 } 

     }; 
     var listadoTabla2 = new List<Table1> 
     { 
      new Table1{ item_id=1, item_name="apple", qty=5 }, 
      new Table1{ item_id=3, item_name="tomato", qty=1 }, 
      new Table1{ item_id=4, item_name="squash", qty=5 } 
     }; 


     var listadoResultado = listadoTabla1; 
     listadoResultado.AddRange(listadoTabla2); 

     var resultado = (from x in listadoResultado 
         group x by new { x.item_id, x.item_name } 
             into grp 
         select new Table1 
         { 
          item_id = grp.Key.item_id, 
          item_name = grp.Key.item_name, 
          qty = grp.Sum(x=>x.qty) 

         }).ToList(); 

ya!

関連する問題