私は約 156K の Datatable を持っており、6 つの Datatable を作成し、table1 が 0 から 30k までの行を保持し、table 2 が 30k1 から 60k までの行を保持するように、それぞれにレコードを分割したいと考えています。
大きなテーブルは、0 から 14 までの数値列で並べられています
ループせずにこれを行う方法に関する提案はありますか?
LINQ を使用できますGroupBy
。
テストデータ:
Dim tbl1 = New DataTable
tbl1.Columns.Add("ID", GetType(Int32))
tbl1.Columns.Add("Text", GetType(String))
For rowIndex As Int32 = 1 To 156000
tbl1.Rows.Add(rowIndex, "Row " & rowIndex)
Next
複数のテーブルに分割:
Dim tableCount = 6
Dim divisor = tbl1.Rows.Count / tableCount ' needed to identify each group '
Dim tables() As DataTable = 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()).
ToArray()
これにより、156000 / 6 = 26000 なので、それぞれが 26000 行のテーブルに分割されることに注意してください。
データベースレベルでそれを行いますか?
テーブルから他のテーブルを選択してから、元のテーブルを削除します。