我有一个有1123条记录的数据表.我想将此表拆分为5个固定大小的单独数据表.每张表的大小限制为225.
因此产生的数据表的大小将是:
DT1 : 225 rows DT2 : 225 rows DT3 : 225 rows DT4 : 225 rows DT5 : 223 rows (remaining rows)
我能找到如何基于使用LINQ列值拆分数据表在这里.
我还发现了一种分裂的数据表到多个表在这里.想知道是否有更好的方法来做到这一点.从链接发布代码:
private static ListSplitTable(DataTable originalTable, int batchSize) { List tables = new List (); int i = 0; int j = 1; DataTable newDt = originalTable.Clone(); newDt.TableName = "Table_" + j; newDt.Clear(); foreach (DataRow row in originalTable.Rows) { DataRow newRow = newDt.NewRow(); newRow.ItemArray = row.ItemArray; newDt.Rows.Add(newRow); i++; if (i == batchSize) { tables.Add(newDt); j++; newDt = originalTable.Clone(); newDt.TableName = "Table_" + j; newDt.Clear(); i = 0; } } return tables; }
需要帮助将数据表拆分为固定大小.
我曾经做过这个小扩展方法:
public static IEnumerable> ToChunks (this IEnumerable enumerable, int chunkSize) { int itemsReturned = 0; var list = enumerable.ToList(); // Prevent multiple execution of IEnumerable. int count = list.Count; while (itemsReturned < count) { int currentChunkSize = Math.Min(chunkSize, count - itemsReturned); yield return list.GetRange(itemsReturned, currentChunkSize); itemsReturned += currentChunkSize; } }
将任何内容IEnumerable
切割成指定块大小的块.
有了这个,你可以简单地做:
var tables = originalTable.AsEnumerable().ToChunks(225) .Select(rows => rows.CopyToDataTable())
这可能比直接表现更好的原因foreach
是这list.GetRange
是从列表中获取一系列行的非常有效的方法.我很想知道你会发现什么.