web-dev-qa-db-ja.com

2つのDataTableをマージして新しいものに保存する

2つのDataTable(dtOneとdtTwo)があり、それらをマージして別のDataTable(dtAll)に入れたい場合。 C#でこれを行うにはどうすればよいですか?データテーブルでMergeステートメントを試しましたが、これはvoidを返します。 Mergeはデータを保存しますか?たとえば、次の場合:

 dtOne.Merge(dtTwo);

DtOneは変更されますか、dtTwoは変更されますか。どちらかが変更された場合、変更は保持されますか?

Mergeがvoidを返すため、これができないことはわかっていますが、dtOneとdtTwoの両方のマージをdtAllに格納できるようにしたいのです。

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

Mergeメソッドは2番目のテーブルから値を取得し、それらを最初のテーブルにマージします。したがって、最初のテーブルは両方の値を保持します。

元のテーブルの両方を保持する場合は、最初に元のテーブルをコピーしてからマージできます。

dtAll = dtOne.Copy();
dtAll.Merge(dtTwo);
92
Jeromy Irvine

(かなり遅いですが、誰かがこの質問につまずくのを助けるかもしれません。)

ジェロミーアーバインの答え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);
}
35
SNag
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);

パラメータTRUEは変更を保持します。

詳細については [〜#〜] msdn [〜#〜] を参照してください。

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

これは私が2つのデータテーブルをマージし、最終結果をグリッドビューにバインドするためにしたことです

        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();

            }
        }
0
anand360