LINQ, 依筆數切分Datatable為多個Datatable
LINQ, 依筆數切分Datatable為多個Datatable
using System;
using System.Data;
using System.Linq;
class Program
{
static void Main()
{
// 假設有一個包含資料的 DataTable
DataTable originalDataTable = GetOriginalDataTable();
// 指定每個小 DataTable 的大小
int batchSize = 1000;
// 使用 LINQ 拆解 DataTable
var smallDataTables = originalDataTable.AsEnumerable()
.Select((row, index) => new { row, index })
.GroupBy(x => x.index / batchSize)
.Select(group => group.Select(x => x.row)
.CopyToDataTable())
.ToList();
// 打印結果,這裡只是簡單的範例,實際上你可能需要對 smallDataTables 做進一步的處理
foreach (var smallDataTable in smallDataTables)
{
PrintDataTable(smallDataTable);
}
}
static DataTable GetOriginalDataTable()
{
// 這裡假設你有一個包含資料的 DataTable,你可以根據實際需求修改
DataTable originalDataTable = new DataTable();
// 假設有一個 "ID" 和 "Name" 兩個欄位
originalDataTable.Columns.Add("ID", typeof(int));
originalDataTable.Columns.Add("Name", typeof(string));
// 加入10000筆資料
for (int i = 1; i <= 10000; i++)
{
originalDataTable.Rows.Add(i, "Name" + i);
}
return originalDataTable;
}
static void PrintDataTable(DataTable dataTable)
{
Console.WriteLine("DataTable:");
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine($"{row["ID"]}\t{row["Name"]}");
}
Console.WriteLine();
}
}
其中, 核心為下面這段CODE, 透過select 帶2個參數(資料與索弔)做資料分組, 再使用索引計算分組資料後, 並取得分組後的資料列, 達到切割DataTable
// 使用 LINQ 拆解 DataTable
var smallDataTables = originalDataTable.AsEnumerable()
.Select((row, index) => new { row, index })
.GroupBy(x => x.index / batchSize)
.Select(group => group.Select(x => x.row)
.CopyToDataTable())
.ToList();
留言
張貼留言