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 ...
随机推荐
- Java Proxy
Client---->Interface A -- -- 代理类 Class AImpl 代理类是动态生成的,借助Proxy类和InvocationHandler接口进行实 ...
- html5zero 网站模板 影片素材
1. http://www.html5zero.com/ HTML5 Zero 收录来自各个网站的网站模版资源,支持响应式网页设计,部分能直接套用于 WordPress.Bootstrap 外,有 M ...
- POJ3237 (树链剖分+线段树)
Problem Tree (POJ3237) 题目大意 给定一颗树,有边权. 要求支持三种操作: 操作一:更改某条边的权值. 操作二:将某条路径上的边权取反. 操作三:询问某条路径上的最大权值. 解题 ...
- Nullsoft教程 NSIS初学者图文教程一
Nullsoft教程 NSIS初学者图文教程一 来源:互联网 作者:佚名 时间:03-29 00:34:33 [大 中 小] Nullsoft Installation System(nsis) 是一 ...
- magento中比较好的博客
magento web-开发 http://www.magentofront-end.com/magentomuban/category/web-frontend 水水博客专栏 http:// ...
- 【题解】【矩阵】【DP】【Leetcode】Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- php-多态
<?php //面对对象三大特性//封装//目的:让类更安全//做法:成员变量变为私有的,通过方法来间接操作成员变量,在方法里面加限制条件 //继承//概念:子类可以继承父类的一切//方法重写: ...
- 冒泡排序(python版)
实现源码 def bubble(array): flag = len(array)- : iter = for i in range(flag): ]: array[i], array[i+]= ar ...
- Win7下安装双系统Centos,并修复Centos引导加载程序安装在U盘上的问题
1.使用U盘安装Centos时,磁盘分区划分要注意:系统(包含Win7)只能4个主分区,所以只能在删除一个主分区或者在扩展分区的空闲分区内建立目录. 2.Centos在安装步骤的最后,引导加载程序的选 ...
- RaidoGroup+RadioButton模拟android下拉框弹出List
引用 <上面的Hello world!是居左的,但是下面的文字却怎么都不能靠边.试了各种方法都不行.最后,无意中给RadioButton添加一个backgroud属性即可:<RadioBu ...