[datatable]两个DataTable 连接

using System;



using System.Collections.Generic;



using System.Text;



using System.Data;



namespace ConsoleApplication7

{



    class Program

    {







        static void Main(string[] args)

        {



            DataSet ds = new DataSet();







            //以下示例实现 利用dataset的Relations为两个DataTable创建类似SQL中Left join 的效果



            //From chj



            //定义数据结构



            DataTable Ks = new DataTable("客商"); //左表or主表



            DataColumn dcID = new DataColumn("ID", System.Type.GetType("System.Int32"));



            DataColumn dcNa = new DataColumn("客商名称", System.Type.GetType("System.String"));



            Ks.Columns.Add(dcID);



            Ks.Columns.Add(dcNa);







            DataTable Dj = new DataTable("订单");//右表or子表



            DataColumn dcID2 = new DataColumn("ID", System.Type.GetType("System.Int32"));



            DataColumn dcNu = new DataColumn("订单数量", System.Type.GetType("System.Int32"));



            Dj.Columns.Add(dcID2);



            Dj.Columns.Add(dcNu);











            //左表数据



            DataRow KsDt = Ks.NewRow();



            KsDt["ID"] = 11;



            KsDt["客商名称"] = "张三";



            Ks.Rows.Add(KsDt);







            KsDt = Ks.NewRow();



            KsDt["ID"] = 12;



            KsDt["客商名称"] = "李四";



            Ks.Rows.Add(KsDt);







            KsDt = Ks.NewRow();



            KsDt["ID"] = 13;



            KsDt["客商名称"] = "王武";



            Ks.Rows.Add(KsDt);







            KsDt = Ks.NewRow();



            KsDt["ID"] = 14;



            KsDt["客商名称"] = "赵柳";



            Ks.Rows.Add(KsDt);











            //右表数据



            KsDt = Dj.NewRow();



            KsDt["ID"] = 11;



            KsDt["订单数量"] = 10;



            Dj.Rows.Add(KsDt);







            KsDt = Dj.NewRow();



            KsDt["ID"] = 12;



            KsDt["订单数量"] = 20;



            Dj.Rows.Add(KsDt);











            KsDt = Dj.NewRow();



            KsDt["ID"] = 11;



            KsDt["订单数量"] = 12;



            Dj.Rows.Add(KsDt);







            KsDt = Dj.NewRow();



            KsDt["ID"] = 12;



            KsDt["订单数量"] = 16;



            Dj.Rows.Add(KsDt);











            KsDt = Dj.NewRow();



            KsDt["ID"] = 13;



            KsDt["订单数量"] = 30;



            Dj.Rows.Add(KsDt);







            KsDt = Dj.NewRow();



            KsDt["ID"] = 14;



            KsDt["订单数量"] = 40;



            Dj.Rows.Add(KsDt);







            KsDt = Dj.NewRow();



            KsDt["ID"] = 15;



            KsDt["订单数量"] = 1250;



            Dj.Rows.Add(KsDt);







            ds.Tables.Add(Ks);



            ds.Tables.Add(Dj);







            //建立两内存表的链接



            //没有为 createConstraints 标志指定任何值(默认为 true),它假定 子 表中的所有行都具有一个存在于父表中的主键值。



            //如果子列可能包含父列不包含的值,添加 DataRelation 时请将 createConstraints 标志设置为 false。



            ds.Relations.Add("左联", Ks.Columns["ID"], Dj.Columns["ID"], false);







            //历遍父表所有的行并赋值给parentRow



            foreach (DataRow parentRow in ds.Relations["左联"].ParentTable.Rows)

            {



                //历遍parentRow相关的所有子行并赋值给childRow



                foreach (DataRow childRow in parentRow.GetChildRows(ds.Relations["左联"]))

                {



                    Console.WriteLine("父表中的ID:{0}  父表中的客商名称: {1}  子表中的订单数量:{2}", parentRow["ID"], parentRow["客商名称"], childRow["订单数量"]);







                }







            }



            Console.ReadLine();







        }



    }



}

 

你可能感兴趣的:(Datatable)