.NET Datable分解数据表

复制代码
        /// <summary>
        /// 分解数据表
        /// </summary>
        /// <param name="originalTab">需要分解的表</param>
        /// <param name="rowsNum">每个表包含的数据量</param>
        /// <returns></returns>
        public DataSet SplitDataTable(DataTable originalTab, int rowsNum)
        {
            //获取所需创建的表数量
            int tableNum = originalTab.Rows.Count / rowsNum;

            //获取数据余数
            int remainder = originalTab.Rows.Count % rowsNum;

            DataSet ds = new DataSet();

            //如果只需要创建1个表,直接将原始表存入DataSet
            if (tableNum == 0)
            {
                ds.Tables.Add(originalTab);
            }
            else
            {
                /////////////////////////////////////
                //如果不能整除则需要+1
                if (remainder != 0)
                {
                    tableNum += 1;
                }
                /////////////////////////////////////
                DataTable[] tableSlice = new DataTable[tableNum];

                //将原始列保存到新表中 .            
                for (int c = 0; c < tableNum; c++)
                {
                    tableSlice[c] = new DataTable();
                    foreach (DataColumn dc in originalTab.Columns)
                    {
                        tableSlice[c].Columns.Add(dc.ColumnName, dc.DataType);
                    }
                }
                //导入行 
                for (int i = 0; i < tableNum; i++)
                {
                    // 如果当前表不是最后一个表
                    if (i != tableNum - 1)
                    {
                        for (int j = i * rowsNum; j < ((i + 1) * rowsNum); j++)
                        {
                            tableSlice[i].ImportRow(originalTab.Rows[j]);
                        }
                    }
                    else
                    {
                        for (int k = i * rowsNum; k < ((i + 1) * rowsNum + remainder); k++)
                        {
                            try
                            {
                                tableSlice[i].ImportRow(originalTab.Rows[k]);
                            }
                            catch (Exception ex)
                            { 
                            }
                            
                        }
                    }
                }

                //将所有表添加到数据集中                 
                foreach (DataTable dt in tableSlice)
                {
                    ds.Tables.Add(dt);
                }
            }
            return ds;
        }
复制代码

 调用实例

复制代码
public dynamic GetDeta(Guid Gid)
        {
            var sql = new SqlModel(DBUtility.DBType.Sql)
            {
                ExecuteType = SqlExecuteType.DataTable,
                Sql = @"SELECT 
                m.ShopCode,
                m.SaleQty
               FROM dbo.Shop(nolock)",
                Where = " WHERE Gid=@Gid ",
                DbParameter = new List<DbParameter> {
                 DBHelper.CreateInDbParameter("Gid", Gid)
                }
            };
            var dt = DBHelper.ExecuteSqlModel<DataTable>(sql);
            DataSet GroupData=new DataSet();
            if (dt.Rows.Count > 0)
            {
                GroupData = SplitDataTable(dt, 3);
            }

             return GroupData;
           

        }
复制代码

 

posted @   蜜雪粮液  阅读(226)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示