一个简单的使用遍历的方式进行DataTable 的拆分

  1. private static List<DataTable> DataTableSplite(DataTable dt, int modcounts)
  2. {
  3. List<DataTable> list = new List<DataTable>();
  4.  
  5. int counts = dt.Rows.Count / modcounts; /// 取整数个数
  6.  
  7. int mod = dt.Rows.Count % modcounts; /// 余数
  8.  
  9. if (mod > )
  10. {
  11. int index = ;
  12. /// 处理拆分倍数的部分
  13. for (int i = ; i < counts; i++)
  14. {
  15.  
  16. DataTable dt1 = dt.Clone();
  17. dt1.TableName = "count" + i;
  18. for (int j = index * modcounts; j < (index + ) * modcounts; j++)
  19. {
  20.  
  21. DataRow newrow = dt.NewRow();
  22. DataRow row1 = dt.Rows[j];
  23. newrow["name"] = row1["name"];
  24. newrow["age"] = row1["age"];
  25. dt1.Rows.Add(newrow.ItemArray);
  26. }
  27. index++;
  28. list.Add(dt1);
  29. }
  30.  
  31. /// 处理余数部分的组合
  32. DataTable dt2 = dt.Clone();
  33. dt2.TableName = "modetable";
  34. for (int i = counts * modcounts; i < dt.Rows.Count; i++)
  35. {
  36. DataRow newrow = dt.NewRow();
  37. DataRow row1 = dt.Rows[i];
  38. newrow["name"] = row1["name"];
  39. newrow["age"] = row1["age"];
  40. dt2.Rows.Add(newrow.ItemArray);
  41. }
  42. list.Add(dt2);
  43.  
  44. }
  45. else
  46. {
  47. /// 余数为0 的情况处理
  48. int index = ;
  49. for (int i = ; i < counts; i++)
  50. {
  51.  
  52. DataTable dt1 = dt.Clone();
  53. dt1.TableName = "modetable";
  54. for (int j = index * modcounts; j < (index + ) * modcounts; j++)
  55. {
  56.  
  57. DataRow newrow = dt.NewRow();
  58. DataRow row1 = dt.Rows[j];
  59. newrow["name"] = row1["name"];
  60. newrow["age"] = row1["age"];
  61. dt1.Rows.Add(newrow.ItemArray);
  62. }
  63. index++;
  64. list.Add(dt1);
  65. }
  66. }
  67.  
  68. return list;
  69. }

实现的方式比较简单,同时也可以使用linq 的方式进行

代码如下:

  1. private static List<DataTable> DataTableSplite2(DataTable dt, int modcounts)
  2. {
  3.  
  4. int counts = dt.Rows.Count / modcounts; /// 取整数个数
  5.  
  6. List<DataTable> list = new List<DataTable>(); ///
  7.  
  8. int index = ;
  9. for (int i = ; i < counts + ; i++)
  10. {
  11. list.Add(dt.AsEnumerable().Skip(index * modcounts).Take(modcounts).CopyToDataTable());
  12.  
  13. index++;
  14. }
  15. return list;
  16.  
  17. }

代码更少。

C# 通用DataTable 拆分小表的更多相关文章

  1. 小表驱动大表, 兼论exists和in

    给出两个表,A和B,A和B表的数据量, 当A小于B时,用exists select * from A where exists (select * from B where A.id=B.id) ex ...

  2. Datatable.Compute小技巧

    在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表.那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据.还记得在第一遍机房收费系统的过程中用的是for 循环,但是 ...

  3. EntityFramework 实体拆分和表拆分

    之前有人问过 EF 如何进行实体拆分和表拆分?我记得当时认为不可能,理由忘记了,后来又有人发了一段配置截图,发现原来是可以的,不记录的东西容易忘掉,关于 EF 实体拆分和表拆分,下面是自己的一些整理. ...

  4. 并行HASH JOIN小表广播问题

    SQL语句: SELECT /*+parallel(t1 16)*/ T1.DATA_DATE, T1.ACCT_NO, T1.ACCT_ORD, T1.ACCT_NO_PK, T1.ACCT_BAL ...

  5. OLAP 大表和小表并行hash join

    一个表50MB 一个表10GB 50M表做驱动表,放在PGA里 这时候慢在对对 10g 的全表扫描 对10个G扫描块 需要开并行 我有这样一个算法 一个进程 读 50mb 8进程 来 扫描 10gb ...

  6. 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)

    前几天,一个用户找到我,说查一个小表的时候非常慢,我问有多慢,他说最快也得半个小时才能出结果,有时干脆不出结果,我说小表多大,他说就几十兆,有点疑惑,让他帮忙获取了相关信息,一看就明白了,原来所谓的小 ...

  7. 查询优化--小表驱动大表(In,Exists区别)

    Mysql 系列文章主页 =============== 本文将以真实例子来讲解小表驱动大表(In,Exists区别) 1 准备数据 1.1 创建表.函数.存储过程 参照  这篇(调用函数和存储过程批 ...

  8. 【Spark调优】小表join大表数据倾斜解决方案

    [使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...

  9. 6.2 小表驱动大表(exists的应用)

    1. 优化原则:小表驱动大表,即小数据集驱动大数据集. select * from A where id in (select id from B) 等价于: for select id from B ...

随机推荐

  1. PHP版本区别

  2. iOS常用正则表达式验证(手机号、密码格式、身份证号等)

    #import @interfaceUtils : NSObject #pragma 正则匹配手机号 + (BOOL)checkTelNumber:(NSString*) telNumber; #pr ...

  3. java作业4

    (一)  请查看String.equals()方法的实现代码,注意学习其实现方法.(发表到博客作业上) (二)  整理String类的Length().charAt(). getChars().rep ...

  4. matlab 不要图像界面

    参考文献matlab -nodesktop

  5. 【Avalon】获取隐藏元素的尺寸

    保存原来的属性 设置成显示的属性 获取尺寸 设置回原来的属性 var cssShow = { position: "absolute", visibility: "hid ...

  6. Tomcat中负载的Session解决办法

    Tomcat进行请求的Session解决方式总体来说有三种, (1)使用Nginx或者Apache反向代理工具进行用户请求的分机器,在Tomcat的Engine中的标签中加入jvmRoute属性,指定 ...

  7. C# 扩展方法 总结

    扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中. 设计一个Money类 public class Money { private decimal amount; public dec ...

  8. ZOJ Problem Set - 3635

    题目大意 有n个从1..n标号的座位,按时间顺序给出每个客人来的时候是坐在第几个空座位,最后给若干个询问问第i号客人坐在哪里 分析 线段树+二分 // Fast Sequence Operations ...

  9. 简单插入排序(C++版)

    #include <iostream> using namespace std; /** \ Insert Sort * * Key: * * reserve: tm = a[i] * * ...

  10. [转载] 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc),编写函数 strcpy(C++版)

    已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串.不调用C++/C ...