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

Как добавить один DataTable в другой DataTable

Я хотел бы добавить один DataTable в другой DataTable. Я вижу, что класс DataTable имеет два метода; "Загрузить (IDataReader)" и "Merge (DataTable)". Из документации обе кажутся "объединить" входящие данные с существующим DataTable, если существуют строки. Я буду выполнять слияние на уровне доступа к данным.

Я мог бы использовать IDataReader и использовать метод Load для объединения DataTables. Или я могу загрузить DataSet с помощью IDataReader, получить DataTable из DataSet, а затем использовать метод Merge для объединения DataTables.

Мне было интересно, может ли кто-нибудь сказать мне, какой именно метод использовать?

В качестве альтернативы, дайте мне знать, если у вас есть другое предложение о том, как выполнить эту задачу.

4b9b3361

Ответ 1

Слияние принимает DataTable, для загрузки требуется IDataReader - поэтому в зависимости от того, какой доступ к вашему слою данных вам нужен, используйте требуемый метод. Я понимаю, что Load будет внутренне вызывать Merge, но не 100% уверен в этом.

Если у вас есть две таблицы данных, используйте Merge.

Ответ 2

Тип данных в том же имени столбца должен быть равен.

dataTable1.Merge(dataTable2);

После этого результат:

dataTable1 = dataTable1 + dataTable2

Ответ 3

Вы можете позволить своей DataAdapter выполнить эту работу. DataAdapter.Fill(DataTable) добавит ваши новые строки в любые существующие строки в DataTable.

Ответ 4

Добавьте два набора данных, содержащих данные, теперь он будет сжиматься по мере необходимости

DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();

DataTable dt1 = new DataTable();
dt1.Columns.Add(new DataColumn("Column1", typeof(System.String)));

DataRow newSelRow1 = dt1.NewRow();
newSelRow1["Column1"] = "Select";
dt1.Rows.Add(newSelRow1);

DataTable dt2 = new DataTable();
dt2.Columns.Add(new DataColumn("Column1", typeof(System.String)));

DataRow newSelRow2 = dt1.NewRow();
newSelRow2["Column1"] = "DataRow1Data";  // Data
dt2.Rows.Add(newSelRow2);

ds1.Tables.Add(dt1);
ds2.Tables.Add(dt2);

ds1.Tables[0].Merge(ds2.Tables[0]);

Теперь ds1 будет иметь объединенные данные

Ответ 5

использовать цикл

  for (int i = 0; i < dt1.Rows.Count; i++)
        {      
           dt2.Rows.Add(dt1.Rows[i][0], dt1.Rows[i][1], ...);//you have to insert all Columns...
        }

Ответ 6

Рассмотрим решение, которое будет аккуратно обрабатывать произвольное количество таблиц.

//ASSUMPTION: All tables must have the same columns
var tables = new List<DataTable>();
tables.Add(oneTableToRuleThemAll);
tables.Add(oneTableToFindThem);
tables.Add(oneTableToBringThemAll);
tables.Add(andInTheDarknessBindThem);
//Or in the real world, you might be getting a collection of tables from some abstracted data source.

//behold, a table too great and terrible to imagine
var theOneTable = tables.SelectMany(dt => dt.AsEnumerable()).CopyToDataTable();

Инкапсулирован в помощника для повторного использования в будущем:

public static DataTable CombineDataTables(params DataTable[] args)
{
    return args.SelectMany(dt => dt.AsEnumerable()).CopyToDataTable();
}

Просто есть несколько таблиц, объявленных в коде?

var combined = CombineDataTables(dt1,dt2,dt3);

Хотите объединить в одну из существующих таблиц вместо создания новой?

dt1 = CombineDataTables(dt1,dt2,dt3);

Уже есть коллекция таблиц, вместо объявленных одна за другой?

//Pretend variable tables already exists
var tables = new[] { dt1, dt2, dt3 };
var combined = CombineDataTables(tables);