您的位置:首页 > 数据库

在C#中把两个DataTable连接起来,相当于Sql的Inner Join方法

2006-07-31 16:30 405 查看
作者:浪漫十一狼
在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inner Join方法,返回DataTable的所有列。
如果两个DataTable中的DataColumn有重复的话,把第二个设置为ColumnName+"_Second",下面是代码,希望对大家有所帮助。


using System;


using System.Data;




namespace WindowsApplication1






{


public class SQLOps






{


public SQLOps()






{


}




public static DataTable Join (DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC)








{




//创建一个新的DataTable




DataTable table = new DataTable("Join");






// Use a DataSet to leverage DataRelation




using(DataSet ds = new DataSet())








{




//把DataTable Copy到DataSet中






ds.Tables.AddRange(new DataTable[]

{First.Copy(),Second.Copy()});




DataColumn[] parentcolumns = new DataColumn[FJC.Length];




for(int i = 0; i < parentcolumns.Length; i++)








{




parentcolumns[i] = ds.Tables[0].Columns[FJC[i].ColumnName];




}




DataColumn[] childcolumns = new DataColumn[SJC.Length];




for(int i = 0; i < childcolumns.Length; i++)








{




childcolumns[i] = ds.Tables[1].Columns[SJC[i].ColumnName];




}






//创建关联




DataRelation r = new DataRelation(string.Empty,parentcolumns,childcolumns,false);




ds.Relations.Add(r);






//为关联表创建列




for(int i = 0; i < First.Columns.Count; i++)








{




table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);




}




for(int i = 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(DataRow firstrow in ds.Tables[0].Rows)








{




//得到行的数据




DataRow[] childrows = firstrow.GetChildRows(r);




if(childrows != null && childrows.Length > 0)








{




object[] parentarray = firstrow.ItemArray;




foreach(DataRow secondrow in childrows)








{




object[] secondarray = secondrow.ItemArray;




object[] joinarray = new object[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();




}






return table;




}






public static DataTable Join (DataTable First, DataTable Second, DataColumn FJC, DataColumn SJC)








{






return Join(First, Second, new DataColumn[]

{FJC}, new DataColumn[]

{SJC});




}




public static DataTable Join (DataTable First, DataTable Second, string FJC, string SJC)








{






return Join(First, Second, new DataColumn[]

{First.Columns[FJC]}, new DataColumn[]

{First.Columns[SJC]});




}






}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: