Here is my code, I have been using it for a long time.
public static void CopyRow(DataRow rowIn, DataRow rowOut, bool isAddOutColumns) { foreach (DataColumn column in rowIn.Table.Columns) { if (!rowOut.Table.Columns.Contains(column.ColumnName)) { if (!isAddOutColumns) continue; rowOut.Table.Columns.Add(column.ColumnName, column.DataType); } bool equals;/* = rowOut[column.ColumnName].GetType().Equals(rowIn[column.ColumnName].GetType()); if (equals) { */ if (rowOut[column.ColumnName] is byte[] && rowIn[column.ColumnName] is byte[]) equals = ((byte[])rowOut[column.ColumnName]).SequenceEqual((byte[])rowIn[column.ColumnName]); else equals = rowOut[column.ColumnName].Equals(rowIn[column.ColumnName]); /* } */ if (!equals) try { rowOut[column.ColumnName] = rowIn[column.ColumnName]; } catch { } } } public static void UnionTables(DataTable table, DataTable source, string uniqueName = "id", bool ReplaceIfDouble = true) { DataView vSource = new DataView(source) { Sort = uniqueName }; foreach (DataColumn column in source.Columns) if (!table.Columns.Contains(column.ColumnName)) table.Columns.Add(column.ColumnName, column.DataType); DataView vTable = new DataView(table) { Sort = uniqueName }; int iRow = 0; foreach (DataRowView rowSource in vSource) { if (rowSource[uniqueName] == DBNull.Value) continue; IComparable idSource = (IComparable)rowSource[uniqueName]; DataRow newRow = null; for (; iRow < vTable.Count; ) { if (vTable[iRow][uniqueName] == DBNull.Value) { ++iRow; continue; } IComparable idTable = (IComparable)vTable[iRow][uniqueName]; if (idTable.CompareTo(idSource) > 0) break; if (idTable.CompareTo(idSource) == 0) { if (ReplaceIfDouble && newRow == null) { newRow = vTable[iRow].Row; CopyRow(rowSource.Row, newRow, true); } else throw new Exception("Строка с таким ID уже существует"); } ++iRow; } if (newRow == null) { newRow = table.NewRow(); CopyRow(rowSource.Row, newRow, true); table.Rows.Add(newRow); } } }
Your case
UnionTables(table1, table2, "RowNumber");
in table1 there will be all the data, but you need to change the name of the Data columns to be unique in all tables