2012-07-23 58 views
0

我需要動態地將數據表拆分爲多個數據表,並且後續數據表的數量也會有所不同。最終用戶將輸入一個值,這將確定將從原始數據導出的數據表的數量。例如:用戶輸入10,原來的dt有20行。將會有10個dt,每個創建2行。但是,如果原始dt有11行,則會創建9行,1行和1行,並創建2行。如何在vb.net中完成此操作而無需對規則進行硬編碼?我已經閱讀並嘗試了下面的帖子,但它仍然沒有讓我在那裏。將數據表拆分爲n個數據表

Split a collection into `n` parts with LINQ?

回答

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()) 
+0

Vielen丹科獻給戴恩援助組織! @Tim Schmelter - 這個建議非常完美!我沒有和LINQ一起工作過很多,你可能有任何書籍建議嗎? – user10001110101 2012-07-24 12:29:18

+0

@Tim你介意解釋當創建'tables'時最後一部分正在做什麼,以及它返回什麼格式/數據的樣子? – JWiley 2014-12-17 17:59:44

+0

這裏是沒有使用LINQ的代碼的c#和vb.net版本爲我工作[分割數據表成塊](http://stackoverflow.com/questions/34663933/split-datatable-into-multiple-fixed-sized -tables/43397945#43397945) – 2017-04-13 17:05:16