58

如果我有 2 个数据表(dtOne 和 dtTwo)并且我想合并它们并将它们放在另一个数据表(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);
4

5 回答 5

106

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

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

dtAll = dtOne.Copy();
dtAll.Merge(dtTwo);
于 2008-11-12T21:46:24.000 回答
43

而不是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);
}
于 2013-01-18T11:22:04.773 回答
12
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);

参数 TRUE 保留更改。

有关详细信息,请参阅MSDN

于 2009-01-18T01:25:25.867 回答
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;
于 2011-01-11T15:27:32.320 回答
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();

            }
        }
于 2016-08-30T07:53:56.690 回答