合并两个有一个相同字段的DataTable (sql join)

 看http://topic.csdn.net/t/20060814/10/4947511.html

 比如table1的字段为:  
  UserId     Password    
   
  Table2的字段为:  
  UserId   Tel  
   
  如何将这两个表合并成这样一张表:  
  UserId   Password   Tel  


DataTable.Merge     只是添加行 不会合并相同字段内的重复
  http://msdn2.microsoft.com/zh-cn/library/system.data.datatable.merge.aspx

 

 

2楼 在Table中最加列,然后对起赋值即可

 

    #region 有一个相同字段的两个table合并,返回第一张table
           public DataTable MergeDataTable(DataTable dt1, DataTable dt2)
           {
               int i = 0;
               int j = 0;
               int r1 = dt1.Rows.Count;
               int r2 = dt2.Rows.Count;
               int c1 = dt1.Columns.Count ;
               int c2 = dt2.Columns.Count;

               int m1 = 0;//相同字段,判断列名是否相同,标记
               int m2 = 0;

               int k = -1;//标记dt2是否和dt1有重复列


               for (i = 0; i < c2; i++)//相同字段名 判断
               {
                   for (j = 0; j < c1; j++)
                   {
                       if (dt1.Columns[j].ToString() == dt2.Columns[i].ToString())
                       {
                           m1 = j;
                           m2 = i;
                       }

                   }
               }

               for (i = 0; i < c2; i++)//添加dt2字段

               {
                   if(i!=m2){
                   dt1.Columns.Add(dt2.Columns[i].ColumnName);
                   }
               }

               c1 = dt1.Columns.Count;//dt1字段改变
           
               for (i = 0; i < r2; i++)
               {
                   for (j = 0; j < r1; j++)
                   {
                       if (dt1.Rows[j][m1].ToString() == dt2.Rows[i][m2].ToString())//有相同字段记录,补充dt1记录行
                       {
                       
                           int p = c1-1;
                           for (int q = 0; q < c2; q++)//添加dt2字段
                           {
                               if (q != m2)
                               {
                                   dt1.Rows[j][p] = dt2.Rows[i][q];
                                   p++;
                               }

                           }
                          
                           k = i;//标记

                       }

                   }
                   if (k < 0)//没有相同字段记录,添加dt2记录
                   {
              
                       dt1.ImportRow (dt2.Rows[i]);
                   }
                   k = -1;
               }

               return dt1;
           }
         #endregion

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值