浙江福彩3d走势图
我們來自五湖四海,不為別的,只因有共同的愛好,為中國互聯網發展出一分力!

在C#中如何將兩個DataTable連接起來

2012年06月02日22:21 閱讀: 1691 次

標簽: 連接, C#, SQL, Join, DataTable, 兩個

在下面的例子中實現了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]}); 


        } 



    } 

} 





分享到: 更多
藍客門戶
©2001-2019 中國藍客聯盟 版權所有.
關于藍客聯盟歷史宗旨章程技術服務聯系我們藍客社區

浙江福彩3d走势图 谁有重庆辛运农场计划 秒速时时软件手机版 湖北福利彩票开奖 黑龙江时时开奖结果表 金牌二人麻将下载 100tk全年历史彩图库 广东福利彩票36选7开奖 手机时时彩冷热号统计 广东26选5开奖 河北时时结果查询结果