C#将DataTable按固定个数拆分成多个表

项目中出现数据量特别大的DataTable,做循环处理时比较慢,

需要将DataTable拆分成多个做多线程处理。

拆分的方法如下,记录一下:

        /// <summary>
        /// 分解数据表
        /// </summary>
        /// <param name="orgTable">需要分解的表</param>
        /// <param name="rowsNum">每个表包含的数据量</param>
        /// <returns></returns>
        public DataSet SplitDataTable(DataTable orgTable, int rowsNum)
        {
            //获取所需创建的表数量
            var tableNum = orgTable.Rows.Count / rowsNum;
            //获取数据余数
            var remainder = orgTable.Rows.Count % rowsNum;
            var ds = new DataSet();
            //如果只需要创建1个表,直接将原始表存入DataSet
            if (tableNum == 0)
            {
                ds.Tables.Add(orgTable);
            }
            else
            {
                var tableSlice = new DataTable[tableNum];
                for (var c = 0; c < tableNum; c++)
                {
                    tableSlice[c] = new DataTable();
                    foreach (DataColumn dc in orgTable.Columns)
                    {
                        tableSlice[c].Columns.Add(dc.ColumnName, dc.DataType);
                    }
                }
                for (var i = 0; i < tableNum; i++)
                {
                    //非最后一个DataTable
                    if (i != tableNum - 1)
                    {
                        for (var j = i * rowsNum; j < ((i + 1) * rowsNum); j++)
                        {
                            tableSlice[i].ImportRow(orgTable.Rows[j]);
                        }
                    }
                    else
                    {
                        for (var k = i * rowsNum; k < ((i + 1) * rowsNum + remainder); k++)
                        {
                            tableSlice[i].ImportRow(orgTable.Rows[k]);
                        }
                    }
                }
                //将所有DataTable加入DataSet
                foreach (var dt in tableSlice)
                {
                    ds.Tables.Add(dt);
                }
            }
            return ds;
        }

 

C#将DataTable按固定个数拆分成多个表

上一篇:C#基础入门第十二天(面向对象多态,File操作流,泛型集合)


下一篇:11.客户端升级为支持Win、Linux跨平台1