public static void Main()
var a = new DataTable("a");
a.Columns.Add("Alpha", typeof(string));
a.Columns.Add("Beta", typeof(bool));
a.Columns.Add("Gamma", typeof(Guid));
a.Columns.Add("Omega", typeof(int));
var newARow = a.NewRow();
newARow["Gamma"] = Guid.NewGuid();
var b = new DataTable("b");
b.Columns.Add("Alpha", typeof(string));
b.Columns.Add("Beta", typeof(bool));
b.Columns.Add("Gamma", typeof(Guid));
b.Columns.Add("Omega", typeof(int));
var newBRow = b.NewRow();
newBRow["Gamma"] = Guid.NewGuid();
Console.WriteLine(JsonConvert.SerializeObject(merged));
public static class Extensions
public static DataTable Zip(this DataTable source, DataTable other, string delimiter = "|")
var result = new DataTable();
foreach(DataColumn column in source.Columns)
result.Columns.Add(column.ColumnName, typeof(string));
var sourceEnum = source.AsEnumerable().GetEnumerator();
var otherEnum = other.AsEnumerable().GetEnumerator();
while(sourceEnum.MoveNext() && otherEnum.MoveNext())
var newRow = result.NewRow();
foreach(DataColumn column in source.Columns)
var sourceValue = sourceEnum.Current[column.ColumnName].ToString();
var otherValue = otherEnum.Current[column.ColumnName].ToString();
newRow[column.ColumnName] =
$"{sourceValue}{delimiter}{otherValue}";