C#中连接两个DataTable,相当于Sql的InnerJoin

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

   在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于SqlInnerJoin方法,返回DataTable的所有列。
如果两个DataTable中的DataColumn有重复的话,把第二个设置为ColumnName+"_Second",下面是代码,希望对大家有所帮助。
usingSystem;
usingSystem.Data;

namespaceWindowsApplication1
{
   publicclassSqlOps
   {
       publicSqlOps()
       {           
       }
       publicstaticDataTableJoin(DataTableFirst,DataTableSecond,DataColumn[]FJC,DataColumn[]SJC)
       {
           //创建一个新的DataTable
           DataTabletable=newDataTable("Join");
           //UseaDataSettoleverageDataRelation
           using(DataSetds=newDataSet())
           {
               //把 DataTableCopy到DataSet中

               for(inti=0;i<parentcolumns.Length;i++)
               {
                   parentcolumns[i]=ds.Tables[0].Columns[FJC[i].ColumnName];
               }
               DataColumn[]childcolumns=newDataColumn[SJC.Length];
               for(inti=0;i<childcolumns.Length;i++)
               {
                   childcolumns[i]=ds.Tables[1].Columns[SJC[i].ColumnName];
               }

               //创建关联
               DataRelationr=newDataRelation(string.Empty,parentcolumns,childcolumns,false);
               ds.Relations.Add(r);

               //为关联表创建列
               for(inti=0;i<First.Columns.Count;i++)
               {
                   table.Columns.Add(First.Columns[i].ColumnName,First.Columns[i].DataType);
               }
               for(inti=0;i<Second.Columns.Count;i++)
               {
                   //看看有没有重复的列,如果有在第二个DataTable的Column的列明后加_Second
                   if(!table.Columns.Contains(Second.Columns[i].ColumnName))
                       table.Columns.Add(Second.Columns[i].ColumnName,Second.Columns[i].DataType);
                   else
                       table.Columns.Add(Second.Columns[i].ColumnName+"_Second",Second.Columns[i].DataType);
               }
               table.BeginLoadData();
               foreach(DataRowfirstrowinds.Tables[0].Rows)
               {
                   //得到行的数据
                   DataRow[]childrows=firstrow.GetChildRows(r);
                   if(childrows!=null&&childrows.Length>0)
                   {
                       object[]parentarray=firstrow.ItemArray;
                       foreach(DataRowsecondrowinchildrows)
                       {
                           object[]secondarray=secondrow.ItemArray;
                           object[]joinarray=newobject[parentarray.Length+secondarray.Length];
                           Array.Copy(parentarray,0,joinarray,0,parentarray.Length);
                           Array.Copy(secondarray,0,joinarray,parentarray.Length,secondarray.Length);
                           table.LoadDataRow(joinarray,true);
                       }
                   }
               }
               table.EndLoadData();
           }
           returntable;
       }
       publicstatic DataTableJoin( DataTableFirst, DataTableSecond,DataColumnFJC,DataColumnSJC)
       {
           returnJoin(First,Second,newDataColumn[]{FJC},newDataColumn[]{SJC});
       }
       publicstatic DataTableJoin( DataTableFirst, DataTableSecond,stringFJC,stringSJC)
       {
           returnJoin(First,Second,newDataColumn[]{First.Columns[FJC]},newDataColumn[]{First.Columns[SJC]});
       }
   }
}

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值