合并两个DataTable

zengfanying 2009-11-01 11:58:07
我再同一个DATASET里面有两个表DataTable,DT1有字段A、B、C、D,DT2有字段A、E、F,如何把它们合并为一个表,(记录数一样,按DT1.A=DT2.A,合并为DT3,使dt3有字段A、B、C、D、E、F),如何合并,用merge可以吗?
...全文
1338 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu_wolf13 2012-07-24
  • 打赏
  • 举报
回复
正为这个发愁呢 好东西
G5XXX 2012-01-10
  • 打赏
  • 举报
回复
看了 很有帮助 thank you!
xxxx_love 2010-02-06
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
gui0605 2009-11-01
  • 打赏
  • 举报
回复
SELECT DT1.*,DT2.E,DT2.F FROM DT1,DT2 WHERE DT1.A=DT2.A
zengfanying 2009-11-01
  • 打赏
  • 举报
回复
不能用merge?
dujingjing1230 2009-11-01
  • 打赏
  • 举报
回复
建议你在读数据的时候就搞定,程序端比较费时间。而且还是数据比较多得table。
JGood 2009-11-01
  • 打赏
  • 举报
回复
1. 自己先new一个DataTable出来,然后创建a,b,c,d,e,f列,然后编历两个datatable,读出来的数据添加到新的datatable中。

2. 或者在读数据库的时候:
SELECT tab_a.A, tab_a.B, tab_a.C, tab_a.D, tab_b.E, tab_b.F
FROM tab_a INNER JOIN tab_b ON tab_a.A = tab_b.A
这样在dataset中,只有一张符合你条件的datatable了。
SQL77 2009-11-01
  • 打赏
  • 举报
回复
SELECT DT1.*,DT2.E,DT2.F FROM DT1,DT2 WHERE DT1.A=DT2.A
SQL77 2009-11-01
  • 打赏
  • 举报
回复
在数据库操作

SELECT DT1.*,DT2.EF FROM DT1,DT2 WHERE DT1.A=DT2.A

再进行绑定
happy664618843 2009-11-01
  • 打赏
  • 举报
回复
DataTable datatable1 = new DataTable();
DataRow dr;
datatable1.Columns.Add(new DataColumn("", typeof(System.Int32)));
datatable1.PrimaryKey=new System.Data.DataColumn[] {datatable1.Columns["UserID"]};
wuyq11 2009-11-01
  • 打赏
  • 举报
回复
DataTable curDt = dt2.Copy(); //curDt存放合并后的值

if(!curDt.Columns.Cotains("B")) curDt.Columns.Add("B");

for(int r = 0; r < dt2.Rows.Count; r++)
{
DataRow dr = dt2.Rows[r];
string aValue = dr["A"].ToString().ToUpper();
foreach(DataRow tDr in dt1.Rows)
{
string tValue = tDr["A"].ToString().ToUpper();
if(tValue == aValue)
{
curDt.Rows[r]["B"] = tDr["B"];
break;
}
}
}


private DataTable UniteDataTable( DataTable dt1 ,DataTable dt2 ,string DTName)
{
DataTable dt3 = dt1.Clone();
for( int i = 0 ;i < dt2.Columns.Count ;i ++ )
{
dt3.Columns.Add( dt2.Columns[i].ColumnName ) ;
}
object[] obj = new object[dt3.Columns.Count];

for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj,0);
dt3.Rows.Add(obj);
}

if( dt1.Rows.Count >= dt2.Rows.Count )
{
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
else
{
DataRow dr3 ;
for( int i = 0 ;i < dt2.Rows.Count - dt1.Rows.Count ;i ++ )
{
dr3 = dt3.NewRow() ;
dt3.Rows.Add( dr3 ) ;
}
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
dt3.TableName = DTName ;
return dt3 ;
}
whb147 2009-11-01
  • 打赏
  • 举报
回复
很晕
zengfanying 2009-11-01
  • 打赏
  • 举报
回复
TD1和TD2是在内存里面,没有保存到数据库,可以这样吗,那数据库连接应该用什么?连接物理数据库的连接?

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧