有两个datable,结构一样dt1.date 时间字段
dt1.stat int字段dt2.date 时间字段
dt2.stat int字段需要把相同时间的行,合并为一个三个字段的新表
date stat1 stat2 请问用ado.net如何实现?(用ado.net实现,不用sql语句)
dt1.stat int字段dt2.date 时间字段
dt2.stat int字段需要把相同时间的行,合并为一个三个字段的新表
date stat1 stat2 请问用ado.net如何实现?(用ado.net实现,不用sql语句)
dt1.Columns.Add("ID",typeof(int));
dt1.Columns.Add("Name",typeof(string));
dt1.PrimaryKey=new DataColumn[] { dt1.Columns[0] };
DataTable dt2=new DataTable();
dt2.Columns.Add("ID",typeof(int));
dt2.Columns.Add("MC",typeof(string));DataTable dt3= dt1.Copy();
dt3.Merge(dt2);
DataTable curDt = dt2.Copy(); //curDt存放合并后的值
if(!curDt.Columns.Cotains("B")) curDt.Columns.Add("B"); for(int r = 0; r < dt2.Rows.Count; r++)
{
DataRow dr = dt2.Rows[r];
string aValue = dr["A"].ToString().ToUpper();
foreach(DataRow tDr in dt1.Rows)
{
string tValue = tDr["A"].ToString().ToUpper();
if(tValue == aValue)
{
curDt.Rows[r]["B"] = tDr["B"];
break;
}
}
}
/// 根据主键合并两个表格
/// </summary>
/// <param name="dtSource">表1</param>
/// <param name="dtProto">表2</param>
/// <param name="mergeColumn">对应主键列</param>
/// <returns></returns>
public DataTable MergerDataTable(DataTable dtSource,DataTable dtProto,string[] mergeColumn)
{
//为了加上主键列,如果已经有了可以去掉
DataColumn[] pkColumns = new DataColumn[mergeColumn.Length];
for (int i = 0; i < pkColumns.Length; i++)
{
pkColumns[i] = dtSource.Columns[mergeColumn[i]];
}
dtSource.PrimaryKey = pkColumns;
for (int i = 0; i < pkColumns.Length; i++)
{
pkColumns[i] = dtProto.Columns[mergeColumn[i]];
}
dtProto.PrimaryKey = pkColumns; DataTable dtCopy = dtSource;
//关键语句
dtCopy.Merge(dtProto,false, MissingSchemaAction.Add);
return dtCopy;
}测试程序:
DataTable table1 = new DataTable("Items");
DataColumn idColumn = new DataColumn("date", typeof(System.Int32));
DataColumn itemColumn = new DataColumn("stat1", typeof(System.Int32));
table1.Columns.Add(idColumn);
table1.Columns.Add(itemColumn); DataTable table2 = table1.Copy();
table2.Columns[1].ColumnName = "stat2"; table1.Rows.Add(1, 2);
table1.Rows.Add(2, 4);
table1.Rows.Add(3, 4); table2.Rows.Add(1, 1);
table2.Rows.Add(2, 2);
table2.Rows.Add(4, 2);
DataTable dtResult = MergerDataTable(table1, table2, new string[1] { "date" });
Merge 方法用于合并架构大致相似的两个 DataTable 对象。源行都会与具有相同主键值的目标行进行匹配。
MissingSchemaAction.Add:添加必需的列以完成架构 。不过需要注意的是采取的是全连接,也就是说表一
中没有而表2中有的也会拷贝到1中(但是stat1字段为null)为了方便我放的int主键,没有用时间测试!