有两个datable,结构一样dt1.date 时间字段
dt1.stat int字段dt2.date 时间字段
dt2.stat int字段需要把相同时间的行,合并为一个三个字段的新表
date stat1 stat2 请问用ado.net如何实现?(用ado.net实现,不用sql语句)

解决方案 »

  1.   

    DataTable dt1=new DataTable(); 
    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; 
        } 
      } 
      

  2.   

    表有了一句话就行! /// <summary>
            /// 根据主键合并两个表格
            /// </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主键,没有用时间测试!