峰峦@叠嶂 2024-08-22 14:41 采纳率: 97.6%
浏览 9

两个数据表,通过批号与订单号,进行合并,怎么实现

请教一下,C#从数据库所查询的内容,分别在两个数据库内,已完成查询,查询内容存储到两个不同对应的数据表内,第一个数据表sumdt,带有“批号batchNo,和订单号orderCode”字段,及产品名称等其他信息,另一个数据表comdtK,也有批号与订单号,及其他信息,现在需要将两个表的内容,通过批号与订单号来对应,合并成一个数据表,并通过datagridview显示出来,请问怎么实现,请给一下代码示例;

  • 写回答

1条回答 默认 最新

  • wanghui0380 2024-08-22 14:54
    关注

    老规矩直接问chatgpt了,一个key你知道,多key建立父子其实一样。嘿嘿特地没问chargpt怎么用linq的left join。你始终不愿意丢dt,给你讲linq算白讲。

    /

     创建 DataSet
    DataSet dataSet = new DataSet();
    
    // 创建并填充第一个 DataTable (父表)
    DataTable dtParent = new DataTable("ParentTable");
    dtParent.Columns.Add("batchNo", typeof(string));
    dtParent.Columns.Add("orderCode", typeof(string));
    dtParent.Columns.Add("otherData", typeof(string));
    
    // 添加一些示例数据到父表
    dtParent.Rows.Add("batch1", "order123", "data1");
    dtParent.Rows.Add("batch2", "order124", "data2");
    
    // 创建并填充第二个 DataTable (子表)
    DataTable dtChild = new DataTable("ChildTable");
    dtChild.Columns.Add("batchNo", typeof(string));
    dtChild.Columns.Add("orderCode", typeof(string));
    dtChild.Columns.Add("detailData", typeof(string));
    
    // 添加一些示例数据到子表
    dtChild.Rows.Add("batch1", "order123", "detail1");
    dtChild.Rows.Add("batch1", "order123", "detail2");
    dtChild.Rows.Add("batch2", "order124", "detail3");
    
    // 将 DataTables 添加到 DataSet
    dataSet.Tables.Add(dtParent);
    dataSet.Tables.Add(dtChild);
    
    // 建立父子关系
    DataRelation relation = new DataRelation("ParentChild",
        new DataColumn[] { dtParent.Columns["batchNo"], dtParent.Columns["orderCode"] },
        new DataColumn[] { dtChild.Columns["batchNo"], dtChild.Columns["orderCode"] });
    
    dataSet.Relations.Add(relation);
    
    // 现在你可以通过关系遍历父子记录
    foreach (DataRow parentRow in dtParent.Rows)
    {
        Console.WriteLine($"Parent: {parentRow["batchNo"]}, {parentRow["orderCode"]}");
        foreach (DataRow childRow in parentRow.GetChildRows(relation))
        {
            Console.WriteLine($" Child: {childRow["detailData"]}");
        }
    }
    
    

    算了还是问一下chatgpt把 ,这个是LINQ to DataTable的,但是如果始终不肯完全丢掉dt,后面这种问题还多着呢。
    /

    / 创建并填充父表
            DataTable dtParent = new DataTable("ParentTable");
            dtParent.Columns.Add("batchNo", typeof(string));
            dtParent.Columns.Add("orderCode", typeof(string));
            dtParent.Columns.Add("otherData", typeof(string));
    
            dtParent.Rows.Add("batch1", "order123", "data1");
            dtParent.Rows.Add("batch2", "order124", "data2");
    
            // 创建并填充子表
            DataTable dtChild = new DataTable("ChildTable");
            dtChild.Columns.Add("batchNo", typeof(string));
            dtChild.Columns.Add("orderCode", typeof(string));
            dtChild.Columns.Add("detailData", typeof(string));
    
            dtChild.Rows.Add("batch1", "order123", "detail1");
            dtChild.Rows.Add("batch1", "order123", "detail2");
            dtChild.Rows.Add("batch2", "order124", "detail3");
    
            // 使用LINQ查询建立父子关系并输出结果
            var query = from parent in dtParent.AsEnumerable()
                        join child in dtChild.AsEnumerable()
                        on new { BatchNo = parent.Field<string>("batchNo"), OrderCode = parent.Field<string>("orderCode") }
                        equals new { BatchNo = child.Field<string>("batchNo"), OrderCode = child.Field<string>("orderCode") }
                        into childGroup
                        select new
                        {
                            Parent = parent,
                            Children = childGroup
                        };
    
            // 输出结果
            foreach (var item in query)
            {
                Console.WriteLine($"Parent: {item.Parent.Field<string>("batchNo")}, {item.Parent.Field<string>("orderCode")}, {item.Parent.Field<string>("otherData")}");
                foreach (var child in item.Children)
                {
                    Console.WriteLine($"  Child: {child.Field<string>("detailData")}");
                }
                Console.WriteLine();
            }
        }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 8月22日

悬赏问题

  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?
  • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题
  • ¥100 无网格伽辽金方法研究裂纹扩展的程序