合并 2 个数据表并存储在一个新的数据表中

Posted

技术标签:

【中文标题】合并 2 个数据表并存储在一个新的数据表中【英文标题】:Merge 2 DataTables and store in a new one 【发布时间】:2010-09-22 01:52:05 【问题描述】:

如果我有 2 个 DataTable(dtOne 和 dtTwo)并且我想将它们合并并将它们放入另一个 DataTable(dtAll)中。我怎样才能在 C# 中做到这一点?我在数据表上尝试了 Merge 语句,但这返回无效。合并是否保留数据?例如,如果我这样做:

 dtOne.Merge(dtTwo);

dtOne 是否发生变化或 dtTwo 是否发生变化,如果其中任何一个发生变化,是否保留所做的更改?

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

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

【问题讨论】:

【参考方案1】:

Merge 方法从第二个表中获取值并将它们与第一个表合并,因此第一个表现在将保存两个表中的值。

如果要保留两个原始表,可以先复制原始表,然后合并:

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

【讨论】:

@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; 【参考方案2】:
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);

参数 TRUE 保留更改。

更多详情请参考MSDN。

【讨论】:

【参考方案3】:
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's answer 相同的答案。最后,是使用 Merge.【参考方案4】:

您可以从一个空的DataTable 开始,而不是dtAll = dtOne.Copy(); 中的dtAll = dtOne.Copy();,然后迭代地逐一合并:

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

等等。

此技术在您想要迭代合并数据表的循环中很有用:

DataTable dtAllCountries = new DataTable();

foreach(String strCountry in listCountries)

    DataTable dtCountry = getData(strCountry); //Some function that returns a data table
    dtAllCountries.Merge(dtCountry);

【讨论】:

【参考方案5】:

这就是我为合并两个数据表并将最终结果绑定到网格视图所做的操作

        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's answer 相同的答案。最后,是使用 Merge.

以上是关于合并 2 个数据表并存储在一个新的数据表中的主要内容,如果未能解决你的问题,请参考以下文章

将游标中的数据合并为一个

垂直合并2个数据框[重复]

将表从两个Access数据库合并到一个新的公用数据库中

怎样用spss将一个数据文件中的几个变量合并成一个变量?

如何在 C# 中合并两个数据表(没有任何公共标识符)?8

excel 两个表格如何匹配多个数据并合并