合并 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 个数据表并存储在一个新的数据表中的主要内容,如果未能解决你的问题,请参考以下文章