在C#中把两个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]});

        }

    }
}

时间: 2024-08-06 22:09:02

在C#中把两个DataTable连接起来的相关文章

在C#中把两个DataTable连接起来,相当于Sql的Inner Join方法

在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inner Join方法,返回DataTable的所有列.如果两个DataTable中的DataColumn有重复的话,把第二个设置为ColumnName+"_Second",下面是代码,希望对大家有所帮助.using System;using System.Data; namespace WindowsApplication1{    public class SQLOps    {    

C#中把两个DataTable连接起来,相当于Sql的Inner Join方法

在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inner Join方法,返回DataTable的所有列.  如果两个DataTable中的DataColumn有重复的话,把第二个设置为ColumnName+"_Second",下面是代码,希望对大家有所帮助.  using System;  using System.Data;  namespace WindowsApplication1  {      public class SQLO

C#中连接两个DataTable,相当于Sql的InnerJoin

    在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inner Join方法,返回DataTable的所有列.如果两个DataTable中的DataColumn有重复的话,把第二个设置为ColumnName+"_Second",下面是代码,希望对大家有所帮助.using System;using System.Data; namespace WindowsApplication1{    public class SQLOps    {

c++-C++中位操作问题,怎么把两个二进制数连接起来

问题描述 C++中位操作问题,怎么把两个二进制数连接起来 如题,如果定义了两个四位二进制数a=1001,b=1100,现在需要把这两个数连接起来变成一个八位二进制数10011100,该怎么写代码?汇编倒是可以很容易实现,先谢谢各位好心人了 解决方案 a * 16 + b 解决方案二: 使用移位操作 (a << 4) & b 解决方案三: 应该是(a<<4)|b 个吧. 解决方案四: c=(a<<4)|b 解决方案五: a*16+b 就可以啦,如果要效率可用位运算

两张表连接-c#怎么在一个dgv中导入两张csv

问题描述 c#怎么在一个dgv中导入两张csv 两个csv里面的表格格式是一样的,导入第一张到dgv中,再将第二张导入,也就是将两张的内容在一个dgv中显示,我能做到将一个csv导入dgv中,但是再导入一张会覆盖原有的(dgv.datasource=data),不知道怎么样将两个csv的表格在dgv中连接起来,求大神解惑!! 解决方案 将两个csv中的数据读到一个datattable中或ilist中,再绑定就可以了. 解决方案二: 从文件读入,按格摆放数据 解决方案三: 贴出你导入的代码,帮你修

取datatable中的两列

问题描述 取datatable中的两列绑定到gridview中.谁知道?谢谢!!!! 解决方案 解决方案二:没看明白.其它列不用?为什么不在SQL里先筛选.解决方案三:在gridview就设置两个绑定列.绑到你相应的datatable列上.同意一楼的看法..不用的列为啥不在sql里去掉解决方案四:解决方法:可以使用ToTable方法,用法如下:DataTabledt=GetData();//这里假设是获取数据源DataTablenewdt=dt.DefaultView.ToTable(false

WinXP建立直接电缆连接将两台电脑连接起来

  直接电缆连接是只有两台电脑时最常用的局域网解决方案之一.直接电缆连接这种方法具有投资小.简单实用的特点,它只需要一根连接线就能利用计算机上的并口或串口将两台电脑连接起来,实现资源共享.故比较适合于家庭有两台电脑,特别是一新一旧两台电脑的互联.那么该如何在WinXP下建立直接电缆连接呢? 我们可以使用New Connection Wizard(新建连接向导)与其它计算机建立直接电缆连接.尽管直接连接方式是与您希望获取数据的计算机进行连接的最简单且最安全方式,然而,它却要求进行连接的客户端与服务

如何在Vista 中设置PPPoE为默认连接

先在 XP 系统中建立一个 PPPOE 连接,建立后将 XP 磁盘分区上 Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk 中的两个文件拷贝到 Vista 磁盘分区的 Users\Public\AppData\Roaming\Microsoft\Network\Connections\Pbk 目录中就可以建立 pppoe 的默认连接,然后到网络连接中设置默认连接的帐号和密码即可,

数据库-c#中这两句什么意思呢

问题描述 c#中这两句什么意思呢 public static SqlConnection conn = null; public static SqlCommand cmd = null; 解决方案 一个链接 数据库 一个执行sql语句 解决方案二: 没意义的写法,定义了对象引用,就相当于=null. 这是多此一举. 解决方案三: public static SqlConnection conn = null; 是定义一个公共的静态的Sql连接对象并赋值为null. public static