C# 通用DataTable 拆分小表
一个简单的使用遍历的方式进行DataTable 的拆分
- private static List<DataTable> DataTableSplite(DataTable dt, int modcounts)
- {
- List<DataTable> list = new List<DataTable>();
- int counts = dt.Rows.Count / modcounts; /// 取整数个数
- int mod = dt.Rows.Count % modcounts; /// 余数
- if (mod > )
- {
- int index = ;
- /// 处理拆分倍数的部分
- for (int i = ; i < counts; i++)
- {
- DataTable dt1 = dt.Clone();
- dt1.TableName = "count" + i;
- for (int j = index * modcounts; j < (index + ) * modcounts; j++)
- {
- DataRow newrow = dt.NewRow();
- DataRow row1 = dt.Rows[j];
- newrow["name"] = row1["name"];
- newrow["age"] = row1["age"];
- dt1.Rows.Add(newrow.ItemArray);
- }
- index++;
- list.Add(dt1);
- }
- /// 处理余数部分的组合
- DataTable dt2 = dt.Clone();
- dt2.TableName = "modetable";
- for (int i = counts * modcounts; i < dt.Rows.Count; i++)
- {
- DataRow newrow = dt.NewRow();
- DataRow row1 = dt.Rows[i];
- newrow["name"] = row1["name"];
- newrow["age"] = row1["age"];
- dt2.Rows.Add(newrow.ItemArray);
- }
- list.Add(dt2);
- }
- else
- {
- /// 余数为0 的情况处理
- int index = ;
- for (int i = ; i < counts; i++)
- {
- DataTable dt1 = dt.Clone();
- dt1.TableName = "modetable";
- for (int j = index * modcounts; j < (index + ) * modcounts; j++)
- {
- DataRow newrow = dt.NewRow();
- DataRow row1 = dt.Rows[j];
- newrow["name"] = row1["name"];
- newrow["age"] = row1["age"];
- dt1.Rows.Add(newrow.ItemArray);
- }
- index++;
- list.Add(dt1);
- }
- }
- return list;
- }
实现的方式比较简单,同时也可以使用linq 的方式进行
代码如下:
- private static List<DataTable> DataTableSplite2(DataTable dt, int modcounts)
- {
- int counts = dt.Rows.Count / modcounts; /// 取整数个数
- List<DataTable> list = new List<DataTable>(); ///
- int index = ;
- for (int i = ; i < counts + ; i++)
- {
- list.Add(dt.AsEnumerable().Skip(index * modcounts).Take(modcounts).CopyToDataTable());
- index++;
- }
- return list;
- }
代码更少。
C# 通用DataTable 拆分小表的更多相关文章
- 小表驱动大表, 兼论exists和in
给出两个表,A和B,A和B表的数据量, 当A小于B时,用exists select * from A where exists (select * from B where A.id=B.id) ex ...
- Datatable.Compute小技巧
在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表.那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据.还记得在第一遍机房收费系统的过程中用的是for 循环,但是 ...
- EntityFramework 实体拆分和表拆分
之前有人问过 EF 如何进行实体拆分和表拆分?我记得当时认为不可能,理由忘记了,后来又有人发了一段配置截图,发现原来是可以的,不记录的东西容易忘掉,关于 EF 实体拆分和表拆分,下面是自己的一些整理. ...
- 并行HASH JOIN小表广播问题
SQL语句: SELECT /*+parallel(t1 16)*/ T1.DATA_DATE, T1.ACCT_NO, T1.ACCT_ORD, T1.ACCT_NO_PK, T1.ACCT_BAL ...
- OLAP 大表和小表并行hash join
一个表50MB 一个表10GB 50M表做驱动表,放在PGA里 这时候慢在对对 10g 的全表扫描 对10个G扫描块 需要开并行 我有这样一个算法 一个进程 读 50mb 8进程 来 扫描 10gb ...
- 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)
前几天,一个用户找到我,说查一个小表的时候非常慢,我问有多慢,他说最快也得半个小时才能出结果,有时干脆不出结果,我说小表多大,他说就几十兆,有点疑惑,让他帮忙获取了相关信息,一看就明白了,原来所谓的小 ...
- 查询优化--小表驱动大表(In,Exists区别)
Mysql 系列文章主页 =============== 本文将以真实例子来讲解小表驱动大表(In,Exists区别) 1 准备数据 1.1 创建表.函数.存储过程 参照 这篇(调用函数和存储过程批 ...
- 【Spark调优】小表join大表数据倾斜解决方案
[使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...
- 6.2 小表驱动大表(exists的应用)
1. 优化原则:小表驱动大表,即小数据集驱动大数据集. select * from A where id in (select id from B) 等价于: for select id from B ...
随机推荐
- PHP版本区别
- iOS常用正则表达式验证(手机号、密码格式、身份证号等)
#import @interfaceUtils : NSObject #pragma 正则匹配手机号 + (BOOL)checkTelNumber:(NSString*) telNumber; #pr ...
- java作业4
(一) 请查看String.equals()方法的实现代码,注意学习其实现方法.(发表到博客作业上) (二) 整理String类的Length().charAt(). getChars().rep ...
- matlab 不要图像界面
参考文献matlab -nodesktop
- 【Avalon】获取隐藏元素的尺寸
保存原来的属性 设置成显示的属性 获取尺寸 设置回原来的属性 var cssShow = { position: "absolute", visibility: "hid ...
- Tomcat中负载的Session解决办法
Tomcat进行请求的Session解决方式总体来说有三种, (1)使用Nginx或者Apache反向代理工具进行用户请求的分机器,在Tomcat的Engine中的标签中加入jvmRoute属性,指定 ...
- C# 扩展方法 总结
扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中. 设计一个Money类 public class Money { private decimal amount; public dec ...
- ZOJ Problem Set - 3635
题目大意 有n个从1..n标号的座位,按时间顺序给出每个客人来的时候是坐在第几个空座位,最后给若干个询问问第i号客人坐在哪里 分析 线段树+二分 // Fast Sequence Operations ...
- 简单插入排序(C++版)
#include <iostream> using namespace std; /** \ Insert Sort * * Key: * * reserve: tm = a[i] * * ...
- [转载] 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc),编写函数 strcpy(C++版)
已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串.不调用C++/C ...