如何在C#中将两个DataTable与sum合并

时间:2017-08-24 17:16:24

标签: c# datatable merge

我有两张桌子。

我需要将它们合并到一个表中,其中包含数字列的复合行,其中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 |

谢谢。

3 个答案:

答案 0 :(得分:0)

最直接的解决方案是使用UNION上的GROUP BY然后使用item_id SUM使用qty字段上的SELECT * FROM Table1 UNION SELECT * FROM Table2 功能,例如:

DataTable

等等。

在C#中,table3 = Table1.Copy(); table3.Merge(Table2); 合并操作可以按如下方式实现:

table3

然后您可以遍历结果LINQ或使用i = 0 while i < 2: numbers = float(input('Enter number: ')) numbers += numbers print(numbers) limit = 101 i += 1 if numbers >= limit: print("Over 100") else: print("Working")

(注意:你的问题是一种通用的,所以答案也是通用的)。

希望这会有所帮助。

答案 1 :(得分: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
    }
}

答案 2 :(得分:0)

您可以将两个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();

见啊!