评论

收藏

[C++] C# 通用DataTable 拆分小表

编程语言 编程语言 发布于:2021-07-18 10:57 | 阅读数:422 | 评论:0

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 > 0)
      {
        int index = 0;
        ///  处理拆分倍数的部分
        for (int i = 0; i < counts; i++)
        {
          DataTable dt1 = dt.Clone();
          dt1.TableName = "count" + i;
          for (int j = index * modcounts; j < (index + 1) * 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 = 0;
        for (int i = 0; i < counts; i++)
        {
          DataTable dt1 = dt.Clone();
          dt1.TableName = "modetable";
          for (int j = index * modcounts; j < (index + 1) * 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 = 0;
      for (int i = 0; i < counts + 1; i++)
      {
        list.Add(dt.AsEnumerable().Skip(index * modcounts).Take(modcounts).CopyToDataTable());
        index++;
      }
      return list;
    }
代码更少。
·


关注下面的标签,发现更多相似文章