国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#中連接兩個DataTable,相當于Sql的Innerjoin

2024-07-21 02:30:15
字體:
來源:轉載
供稿:網友

    在下面的例子中實現了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]});
        }
    }
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长垣县| 吴桥县| 班玛县| 汉源县| 富蕴县| 衡水市| 江北区| 南安市| 兴文县| 高台县| 桐柏县| 尼勒克县| 习水县| 昌图县| 荔浦县| 台中市| 楚雄市| 板桥市| 丹巴县| 施甸县| 华容县| 民县| 大庆市| 洛川县| 富阳市| 白玉县| 宣威市| 鸡东县| 明水县| 宁乡县| 彭阳县| 古交市| 响水县| 丹巴县| 海门市| 巨鹿县| 禹城市| 信阳市| 托里县| 泾阳县| 无极县|