DataTable表连接

摘要:
isInnerJoin){joinDt.LoadDataRow(parentarray,true);}}接头Dt。EndLoadData();}}catch(Exceptionex){throwex;}returnjoinDt;}
public  static System.Data.DataTable TableJoin(System.Data.DataTable dt, System.Data.DataTable dtDetail, string[] parentFieldName, string[] relationFieldName, bool isInnerJoin, string relationName = "")
        {
            System.Data.DataTable joinDt = newSystem.Data.DataTable();

            try{
                using (DataSet ds = newDataSet())
                {
                    ds.Tables.AddRange(newSystem.Data.DataTable[] { dt, dtDetail });
                    if (string.IsNullOrEmpty(relationName))
                    {
                        relationName =Guid.NewGuid().ToString();
                    }
                    List<DataColumn> parentc = new List<DataColumn>();
                    List<DataColumn> childc = new List<DataColumn>();
                    foreach (var item inparentFieldName)
                    {
                        parentc.Add(dt.Columns[item]);
                    }
                    foreach (var item inrelationFieldName)
                    {
                        childc.Add(dtDetail.Columns[item]);
                    }
                    DataRelation relation = new DataRelation(relationName, parentc.ToArray(), childc.ToArray(), false);
                    ds.Relations.Add(relation);

                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        joinDt.Columns.Add(dt.Columns[i].ColumnName, dt.Columns[i].DataType);
                    }
                    for (int i = 0; i < dtDetail.Columns.Count; i++)
                    {
                        joinDt.Columns.Add(dtDetail.Columns[i].ColumnName, dtDetail.Columns[i].DataType);
                    }


                    joinDt.BeginLoadData();
                    foreach (DataRow firstrow in ds.Tables[0].Rows)
                    {
                        //得到行的数据
                        DataRow[] childrows =firstrow.GetChildRows(relation);
                        object[] parentarray =firstrow.ItemArray;
                        if (childrows != null && childrows.Length > 0)
                        {
                            foreach (DataRow childrow inchildrows)
                            {
                                object[] childarray =childrow.ItemArray;
                                object[] joinarray = new object[parentarray.Length +childarray.Length];
                                Array.Copy(parentarray, 0, joinarray, 0, parentarray.Length);
                                Array.Copy(childarray, 0, joinarray, parentarray.Length, childarray.Length);
                                joinDt.LoadDataRow(joinarray, true);
                            }
                        }
                        else{
                            if (!isInnerJoin)
                            {
                                joinDt.LoadDataRow(parentarray, true);
                            }
                        }
                    }
                    joinDt.EndLoadData();
                }
            }
            catch(Exception ex)
            {
                throwex;
            }

            returnjoinDt;
        }

免责声明:文章转载自《DataTable表连接》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇计算音频帧的播放时间(音频码流 音频帧)Qt 事件总结(鼠标、键盘) QMouseEvent、QKeyEvent下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

差分方程的零输入响应与零状态响应

差分方程的迭代分析方法有以下缺点:没有闭合解,不利于数学分析。某个时间的输出只能从头开始计算。本文介绍了差分方程的零输入响应和零状态响应分析方法。对于系统,这种分析方法可以很好地表达系统响应的物理意义=Y[-1]=0$Input Y[n]。回顾零输入响应和零状态响应的迭代计算,我们发现以下规则:$egin{align*}y[0]&=-&qqu...

微信小程序的模板消息与小程序订阅消息

有关获取分发权限的更多信息,请参阅applet侧消息订阅接口wx的步骤3。requestSubscribeMessage。有关发出订阅消息的调用接口的更多信息,请参阅服务器端消息发送接口subscribeMessage。sendwx。requestSubscribeMessage(Objectobject)基本库2.8.2。必须填写参数Objectobjec...

ORACLE无法删除当前连接用户

今天在做Oracle数据库是遇到ORACLE无法删除当前连接用户,经查找可用如下方法解决。SQL˃dropuseracascade;//删除用户以及用户表空间下所有对象用户已丢弃。...

mongodb 占用内存及解决方法

解决方案是限制Swap的使用:[root@mongodb~]#Sysctl wvm。swap=0查看内存最常用的命令是空闲的:[root@mongodb~]#Free totalused freesharedbuff/cacheavailableEm:78250931925992443Swap:000当新手看到used列中的值太大而Free列中的数值太小时,...

【译】颜色空间 REC.709 vs sRGB的

但转换函数(gamma)不同。让我们先定义颜色空间。颜色模型和颜色空间非常混乱。RGB颜色模型表示所有颜色都可以通过RGB的线性组合获得,而颜色空间是指能够解析数值的颜色模型。颜色空间的定义包含以下信息。颜色空间可以基于RGB模型检测颜色,因此使用三原色来表示所有颜色似乎是合理的。三原色的颜色坐标与sRGB相同。...

调用钉钉接口发送消息

1.首先登录指甲显影剂后台https://ding-doc.dingtalk.com/2.选择H5微应用程序创建应用程序;2stringappsecret=“kKsIwqEQJHt3mW69opU6RO9...