[英]How to append two DataTable column wise in C#
我有一个带有M列的DataTable
T1和另一个带有N列的DataTable
T2 ,它们的行数相等。
我想将T1和T2合并到另一个DataTable
T中 ,以使结果表T包含M + N列。
在C#中有什么简单的方法可以实现,我的意思是不使用Loop。
您可以使用LINQ外连接查询,并将数据从这两个表发送到最终表。 下面的示例代码
//First DataTable
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("ID");
DataColumn dc1 = new DataColumn("Name");
dt.Columns.AddRange(new DataColumn[] {dc, dc1 });
DataRow dr = dt.NewRow();
dr[dc] = "1";
dr[dc1] = "Test";
dt.Rows.Add(dr);
//Second DataTable
DataTable dt1 = new DataTable();
DataColumn dc2 = new DataColumn("ID");
DataColumn dc3 = new DataColumn("City");
dt1.Columns.AddRange(new DataColumn[] { dc2, dc3 });
DataRow dr1 = dt1.NewRow();
dr1[dc2] = "1";
dr1[dc3] = "Belgium";
dt1.Rows.Add(dr1);
//Rasult DataTable
DataTable result = new DataTable();
DataColumn col1 = new DataColumn("ID");
DataColumn col2 = new DataColumn("Name");
DataColumn col3 = new DataColumn("City");
result.Columns.AddRange(new DataColumn[] { col1, col2, col3 });
// Join both table data
var data = from row1 in dt.AsEnumerable()
join row2 in dt1.AsEnumerable()
on row1.Field<string>("ID") equals row2.Field<string>("ID") into test
from rw in test.DefaultIfEmpty()
select result.LoadDataRow(new object[]
{
row1.Field<string>("ID"),
row1.Field<string>("Name"),
rw == null ? "No City" : rw.Field<string>("City")
}, false);
data.CopyToDataTable();
除循环外没有其他方法。 DataTables有一个合并功能,但是它正在按行进行操作,即使您可以根据需要指定添加列,也可以将其他列保留为空,并且会得到以下内容:
values values values null null
null null null values values
然后,使用这种方法可以遍历所有行,并执行步骤2,其中将两行合并为新DataTable中的一行,但是为此,您还需要一个DataTable来存储结果。
如果您知道行数相同,则可以将列添加到具有较少列数的表中,然后将其复制到表中。
同样,我更喜欢循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.