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();

 

留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記