首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

合拢datatable

2014-01-03 
合并datatable现在有三个表,如下a1表:字段1字段2a111b222a2表:字段1字段2a333b444a3表:字段1字段2a555b666

合并datatable
现在有三个表,如下
a1表:
字段1    字段2  
a         111
b         222
a2表:
字段1    字段2
a        333
b        444
a3表:
字段1     字段2
a         555
b         666

怎样合并显示如下表呢

字段1     字段2      字段3     字段4     
a          111       333       555
b          222       444       666

求方法
[解决办法]
先合并
1和2

然后得到的table再合并3
[解决办法]

引用:
用什么方法合并,能给些代码吗

表之间有没有可以关联的字段,如果没有的话,可以建立下,这样就可以使用Join来合并
[解决办法]

protected DataTable MergeDataTable(DataTable dt1, DataTable dt2, string KeyColName,bool isMergeAll)
        {
            //合并列
            DataTable ndt1 = dt1.Copy();
            DataTable ndt2 = dt2.Copy();
            ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] };
            for (int i = 0; i < ndt2.Columns.Count; i++)
            {
                if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                {
                    ndt1.Columns.Add(ndt2.Columns[i].ColumnName);
                }
            }

            //合并相同主键的数据
            for (int i = 0; i < ndt1.Rows.Count; i++)
            {
                DataRow inrow = ndt2.Rows.Find(ndt1.Rows[i][KeyColName]);
                if (inrow != null)
                {
                    for (int j = 0; j < ndt2.Columns.Count; j++)
                    {
                        if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                        {
                            ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName];
                        }
                    }
                    if (isMergeAll)
                    {


                        ndt2.Rows.Remove(inrow);
                    }
                }
            }
            if (isMergeAll)
            {
                //合并不同主键的数据
                for (int i = 0; i < ndt2.Rows.Count; i++)
                {
                    DataRow row = ndt1.NewRow();
                    for (int j = 0; j < ndt2.Columns.Count; j++)
                    {
                        row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName];
                    }
                    ndt1.Rows.Add(row);
                }
            }
            return ndt1;
        }



引用:
用什么方法合并,能给些代码吗

[解决办法]
用linq更简单一点。
DataTable dt1 = new DataTable();
            dt1.Columns.Add("字段1", typeof(string));
            dt1.Columns.Add("字段2", typeof(int));
            dt1.Rows.Add("a", 111);
            dt1.Rows.Add("b", 222);

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("字段1", typeof(string));
            dt2.Columns.Add("字段2", typeof(int));
            dt2.Rows.Add("a", 333);
            dt2.Rows.Add("b", 444);

            DataTable dt3 = new DataTable();
            dt3.Columns.Add("字段1", typeof(string));
            dt3.Columns.Add("字段2", typeof(int));
            dt3.Rows.Add("a", 555);
            dt3.Rows.Add("b", 666);

            var result = from x in dt1.AsEnumerable()
                         from y in dt2.AsEnumerable()
                         from z in dt3.AsEnumerable()
                         where x.Field<string>("字段1") == y.Field<string>("字段1")
                         && x.Field<string>("字段1") == z.Field<string>("字段1")
                         select new
                         {
                             字段1 = x.Field<string>("字段1"),
                             字段2 = x.Field<int>("字段2"),


                             字段3 = y.Field<int>("字段2"),
                             字段4 = z.Field<int>("字段2"),
                         };

热点排行