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;

        }
复制代码

代码更少。

 

posted on   荣锋亮  阅读(3563)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示