【问题标题】:Split datatable into n datatables将数据表拆分为 n 个数据表
【发布时间】:2012-07-23 15:36:22
【问题描述】:

我需要将一个数据表动态拆分成多个数据表,后续数据表的数量会有所不同。最终用户将输入一个值,这将确定从原始数据表派生的数据表的数量。例如:用户输入10,原来的dt有20行。将有 10 个 dt,每个创建 2 行。但是,如果原始 dt 有 11 行,则将有 9 个 dt 和 1 行和 1 个 dt 和 2 行。我如何在 vb.net 中完成此操作而无需硬编码一堆 if 规则?我已通读并尝试了下面的帖子,但仍然无法到达那里。

Split a collection into `n` parts with LINQ?

【问题讨论】:

    标签: vb.net datatable


    【解决方案1】:

    你可以使用LINQ的GroupBy:

    Dim tbl1 = New DataTable
    tbl1.Columns.Add("ID", GetType(Int32))
    tbl1.Columns.Add("Text", GetType(String))
    For rowIndex As Int32 = 1 To 11
        tbl1.Rows.Add(rowIndex, "Row " & rowIndex)
    Next
    
    Dim tableCount = 10  ' what the user entered '
    Dim divisor = tbl1.Rows.Count / tableCount ' needed to identify each group '
    Dim tables = tbl1.AsEnumerable().
                Select(Function(r, i) New With {.Row = r, .Index = i}).
                GroupBy(Function(x) Math.Floor(x.Index / divisor)).
                Select(Function(g) g.Select(Function(x) x.Row).CopyToDataTable())
    

    【讨论】:

    • Vielen danke für dein hilfe! @Tim Schmelter - 这个建议非常有效!我在 LINQ 上工作得不多,请问您有什么书籍建议吗?
    • @Tim 你介意解释最后一部分在创建tables 时在做什么,以及它返回的格式/数据是什么样的?
    • 这里是代码的 c# 和 vb.net 版本,不使用 LINQ,它对我有用splitt datatable into chunks
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多