Объединить 2 DataTables и сохранить в новом - PullRequest
48 голосов
/ 13 ноября 2008

Если у меня есть 2 DataTables (dtOne и dtTwo), и я хочу объединить их и поместить в другую DataTable (dtAll). Как я могу сделать это в C #? Я попытался использовать оператор 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);

Ответы [ 5 ]

90 голосов
/ 13 ноября 2008

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

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

dtAll = dtOne.Copy();
dtAll.Merge(dtTwo);
34 голосов
/ 18 января 2013

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

Вместо 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);
}
11 голосов
/ 18 января 2009
dtAll = dtOne.Copy();
dtAll.Merge(dtTwo,true);

Параметр TRUE сохраняет изменения.

Подробнее см. MSDN .

1 голос
/ 11 января 2011
DataTable dtAll = new DataTable();
DataTable dt= new DataTable();
foreach (int id in lst)
{
    dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable
}
dtAll = dt;
0 голосов
/ 30 августа 2016

Это то, что я сделал для объединения двух таблиц данных и привязки окончательного результата к представлению таблицы

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

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...