最近需要对不同结构的DataTable进行合拼,类似于外连接的方式。
在网上查了一下写法基本上都是循环之类,而我觉得应该对于这种情况C#应该有自己简单的方式。
因此发现了一东西。
首先,我发现网上都是循环做的
这是我的写法:
DataTable dt1=new DataTable();
DataTable dt2=new DataTable();
dt1.Columns.Add("ID",typeof(Int32));
dt1.Columns.Add("Date",typeof(DateTime));
dt1.Columns.Add("age",typeof(Int32));
dt2.Columns.Add("ID", typeof(Int32));
dt2.Columns.Add("Date", typeof(DateTime));
dt2.Columns.Add("score", typeof(Int32));
for (int i = 0; i < 10000; i++)
{
DataRow dr1 = dt1.NewRow();
dr1["ID"] = i;
dr1["Date"] = DateTime.Now.AddDays(i);
dr1["age"] = i;
dt1.Rows.InsertAt(dr1, 0);
DataRow dr2 = dt2.NewRow();
dr2["ID"] = i;
dr2["Date"] = DateTime.Now.AddDays(i);
dr2["score"] = i;
dt2.Rows.InsertAt(dr2, 0);
}
写了下来,觉得这样的确很别扭,而同结构的DataTable记得是Merge的,
在msdn上找了一下Merge的用法。
三个重载方法。第一、二个方法是常用,应该处理结构的DataTable
试试了第三个方法结果,发现别人的确提供了的
dt1.PrimaryKey = new DataColumn[] { dt1.Columns["ID"], dt1.Columns["Date"] }; //这句一定要,不然没办法实现
dt1.Merge(dt2, false, MissingSchemaAction.AddWithKey);
同时,我测试了一下两种方式的速度,第二种的确优于第一种。
注:这是本人第一次写博客,欢迎指正。