Search code examples
c#datatable

How to merge multiple DataTables


When I want to join two tables it goes down one row. How can I solve this?

public DataTable MergeTables()
{
    var dataTable1 = new DataTable();
    dataTable1.Columns.Add("Id");
    dataTable1.Columns.Add("Name");
    dataTable1.Columns.Add("Surname");
    dataTable1.Rows.Add("1", "Mike", "Tyson");
    dataTable1.Rows.Add("2", "John", "Wick");

    var dataTable2 = new DataTable();
    dataTable2.Columns.Add("Country");
    dataTable2.Columns.Add("Age");
    dataTable2.Rows.Add("America", "35");
    dataTable2.Rows.Add("Brasil", "50");

    dataTable1.Merge(dataTable2);
    return dataTable1;
}

Output:


Solution

  • Merge requires primary key to match the records:

    var dataTable1 = new DataTable();
    dataTable1.Columns.Add("Id");
    dataTable1.Columns.Add("Name");
    dataTable1.Columns.Add("Surname");
    dataTable1.PrimaryKey = new [] { dataTable1.Columns["Id"] }; // set PK
    
    dataTable1.Rows.Add("1", "Mike", "Tyson");
    dataTable1.Rows.Add("2", "John", "Wick");
    
    var dataTable2 = new DataTable();
    dataTable2.Columns.Add("Id"); // add PK column
    dataTable2.Columns.Add("Country");
    dataTable2.Columns.Add("Age");
    dataTable2.PrimaryKey = new [] { dataTable2.Columns["Id"] }; // set PK
    
    dataTable2.Rows.Add("1", "America", "35"); // add PK value
    dataTable2.Rows.Add("2", "Brasil", "50"); // add PK value
    
    dataTable1.Merge(dataTable2);