• [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();
    
    
    
            }
    
        }
    
    }
  • 相关阅读:
    Postman 接口数据生成
    python中获取中位数(搬来的)
    数据库域名配置
    每10秒执行定时任务/每5分钟执行一次(附crontab的常用的命令)
    MATCHED 用法
    leetcode279 Perfect Squares
    leetcode480 Sliding Window Median
    leetcode295 Find Median from Data Stream
    leetcode424 Longest Repeating Character Replacement
    leetcode209 Minimum Size Subarray Sum
  • 原文地址:https://www.cnblogs.com/beeone/p/3618095.html
Copyright © 2020-2023  润新知