2017-08-24 52 views
-2

我有兩個表。如何合併兩個DataTable與總和在C#

我需要將它們合併到一個表中,其中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 | 

謝謝。

+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

最簡單的解決方案將是對item_id使用UNION然後GROUP BY使用上qty字段SUM功能,如:

SELECT * FROM Table1 
UNION 
SELECT * FROM Table2 

等。

在C#中DataTable合併操作可以實現如下:

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

,那麼你可以通過結果table3或使用LINQ循環。

(注意:你的問題是一種通用的,所以答案也是通用的)。

希望這會有所幫助。

+0

感謝Alex Bell,但這裏有2個DataTable在C#中,而不是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

你可以把兩個DataTable的一個變種或列表,那麼你可以做一組:是這樣的。

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(); 

看到你!