合并两个数据表并存储到一个新的数据表中

60
如果我有两个数据表(dtOne和dtTwo),并且想将它们合并到另一个数据表(dtAll)中,我该如何在C#中实现?我尝试在数据表上使用Merge语句,但这会返回空值。Merge是否会保留数据?例如,如果我执行以下操作:
 dtOne.Merge(dtTwo);

dtOne和dtTwo哪一个会发生变化,如果有任何一个发生变化,这些更改是否会被保留?

我知道我不能这样做,因为Merge返回void,但我想能够将dtOne和dtTwo的Merger存储在dtAll中:

//Will Not work, How do I do this
dtAll = dtOne.Merge(dtTwo);
5个回答

110

Merge 方法从第二个表中获取值并将其与第一个表合并,因此第一个表现在将包含两个表的值。

如果您想保留原始表的两个副本,可以复制原始表并进行合并:

dtAll = dtOne.Copy();
dtAll.Merge(dtTwo);

1
由@Knickerless-Noggins编写的代码:public static DataTable MergeTwoDataTables(DataTable tableA, DataTable tableB) { DataTable MethodResult = null; try { DataTable TableA = tableA.Copy(); TableA.Merge(tableB); MethodResult = TableA; } catch //(Exception ex) { //ex.HandleException(); } return MethodResult; } - Kiquenet

46

你可以按照Jeromy Irvine的回答里提到的方法,不需要使用 dtAll = dtOne.Copy(); ,而是可以从一个空的 DataTable 开始,然后逐个迭代地合并:

dtAll = new DataTable();
...
dtAll.Merge(dtOne);
dtAll.Merge(dtTwo);
dtAll.Merge(dtThree);
...

等等。

这种技术在循环中非常有用,特别是当你想要迭代地合并数据表时:

DataTable dtAllItems = new DataTable();

foreach(var item in items)
{
    DataTable dtItem = getDataTable(item); // some function that returns a data table
    dtAllItems.Merge(dtItem);
}

12
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);

参数 TRUE 会保留更改。

有关更多详细信息,请参阅 MSDN


1
DataTable dtAll = new DataTable();
DataTable dt= new DataTable();
foreach (int id in lst)
{
    dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable
}
dtAll = dt;

在我看来,这个回答没有什么用。和Jeromy Irvine的回答一模一样。最终,使用Merge。 - Kiquenet

0

这是我合并两个数据表并将最终结果绑定到GridView的方法

        DataTable dtTemp=new DataTable();
        for (int k = 0; k < GridView2.Rows.Count; k++)
        {
            string roomno = GridView2.Rows[k].Cells[1].Text;
            DataTable dtx = GetRoomDetails(chk, roomno, out msg);
            if (dtx.Rows.Count > 0)
            {
                dtTemp.Merge(dtx);
                dtTemp.AcceptChanges();

            }
        }

在我看来,这个回答没有什么用。和Jeromy Irvine的回答一模一样。最终,使用Merge - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接