Подтвердить что ты не робот

Слияние 2 DataTables и сохранение в новом

Если у меня есть 2 DataTables (dtOne и dtTwo), и я хочу объединить их и поместить их в другой DataTable (dtAll). Как это сделать на С#? Я попробовал оператор Merge на datatable, но это возвращает void. Сохраняет ли Merge данные? Например, если я:

 dtOne.Merge(dtTwo);

Изменяется ли dtOne или изменяется dtTwo, и если какой-либо из них изменяется, сохраняются ли изменения?

Я знаю, что не могу этого сделать, потому что Merge возвращает void, но я хочу иметь возможность сохранять слияние как dtOne, так и dtTwo в dtAll:

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

Ответ 1

Метод Merge берет значения из второй таблицы и объединяет их с первой таблицей, поэтому первая теперь будет удерживать значения от обоих.

Если вы хотите сохранить обе исходные таблицы, вы можете сначала скопировать оригинал, а затем слить:

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

Ответ 2

(Довольно поздно, но может помочь кому-то споткнуться на этот вопрос.)

Вместо 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);
}

Ответ 4

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

Ответ 5

Это то, что я сделал для слияния двух типов данных и привязки конечного результата к 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();

            }
        }