在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
    {
        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-07 13:04:48

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

在C#中把两个DataTable连接起来

作者:浪漫十一狼在下面的例子中实现了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    {

Linux中利用两个现存文件,生成一个新的文件

Linux中利用两个现存文件,生成一个新的文件的方法 前提条件:每个文件中不得有重复行 1. 取出两个文件的并集(重复的行只保留一份) cat file1 file2 | sort | uniq 2. 取出两个文件的交集(只留下同时存在于两个文件中的文件) cat file1 file2 | sort | uniq -d 3. 删除交集,留下其他的行 cat file1 file2 | sort | uniq –u

浅析Python中的join()方法的使用

  这篇文章主要介绍了Python中的join()方法的使用,是Python入门中的基础知识,需要的朋友可以参考下 join()方法方法返回一个在序列的字符串元素被加入了由str分隔的字符串. 语法 以下是join()方法的语法: ? 1 str.join(sequence) 参数 sequence -- 这是要连接的元素的顺序. 返回值 此方法返回一个字符串,在序列seq字符串的连接.元素之间的分离器是字符串 str. 例子 下面的示例演示了join()方法的使用. ? 1 2 3 4 5 #

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(新建连接向导)与其它计算机建立直接电缆连接.尽管直接连接方式是与您希望获取数据的计算机进行连接的最简单且最安全方式,然而,它却要求进行连接的客户端与服务