日期:2014-05-18  浏览次数:20485 次

DataSet中多个表怎么合并??
t1   :a,b,c
t2   :a,d,f
要合并成:a,b,c,d,f
怎么合并????
不要说在数据库里join,两个表数据都很大,而且每个表取数据的逻辑比较复杂,如果取笛卡尔集起码30秒以上才能执行完。

------解决方案--------------------
所引加视图才是王道啊~~~

你要是非在ds里面拼就只好

DataSet ds_new = new DataSet()

ds_new.Tables[0].Columns.Add(new DataColumn( "a ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "b ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "c ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "d ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "f ", Type.GetType( "System.String ")));

然后把t1,t2.的数据 用foreach 全导到 ds_new.Tables[0]里面了.

------解决方案--------------------
DataSet ds_new = new DataSet()

ds_new.Tables[0].Columns.Add(new DataColumn( "a ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "b ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "c ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "d ", Type.GetType( "System.String ")));
ds_new.Tables[0].Columns.Add(new DataColumn( "f ", Type.GetType( "System.String ")));

==================================================================================
YISUKU_LEE(笨笨的胖蜜蜂) 的方法对
------解决方案--------------------
不要说在数据库里join,两个表数据都很大,而且每个表取数据的逻辑比较复杂,如果取笛卡尔集起码30秒

=========

要是如此,我看,DataTable 间合并,300s 估计都完不成 ....

还得加上,单独从 db 读取这几个 table 的时间

为什么如此的不相信 Structured Query Language ??????


------解决方案--------------------
实际情况是差不多有5、6个表,每个表差不多500万的数据,你们试试在数据库里都作笛卡尔集,不死掉才怪!!

============

原来你只知道集合操作有个叫 笛卡儿积(全连接),请问知道 SQL 还有左(右)外连接不?

知道 JION 了依然可以 WHEHE 不?

好吧,先不讨论 DataTable 怎么合并吧(其实就 DataSet/DataTable.Merge 方法)
那,你准备读取 N 张 200W+ 数据到 DataTable ,然马 Merge ?


不是,每个表只取差不多200条左右出来!
=========
原来,真的是喝高了 ....



------解决方案--------------------
采取正确的策略,

建立索引(WHERE 字句中的条件字段)

连接/子查询

不管你是内、左/右外连接,【还是真的需要】全连接,

绝对比你用 DataTable/Set.Merge 效率高!!!