更新:這裏有一個similar question用Linq將DataTable分成固定大小塊的乾淨方法是什麼?
假設我有一個DataTable
在這幾千DataRows
。
我想分解成更小的行塊進行處理。
我認爲C#3改進的使用數據的能力可能有所幫助。
這是骷髏我到目前爲止:
DataTable Table = GetTonsOfData();
// Chunks should be any IEnumerable<Chunk> type
var Chunks = ChunkifyTableIntoSmallerChunksSomehow; // ** help here! **
foreach(var Chunk in Chunks)
{
// Chunk should be any IEnumerable<DataRow> type
ProcessChunk(Chunk);
}
上用什麼來替代ChunkifyTableIntoSmallerChunksSomehow
有什麼建議?
我真的很感興趣的人如何做到這一點訪問C#3工具。如果嘗試應用這些工具不合適,請解釋!
更新3(修訂組塊,因爲我真的很想表,而不是ienumerables;與擴展方法去 - 感謝雅各布):
最終實現:
擴展方法來處理分塊:
public static class HarenExtensions
{
public static IEnumerable<DataTable> Chunkify(this DataTable table, int chunkSize)
{
for (int i = 0; i < table.Rows.Count; i += chunkSize)
{
DataTable Chunk = table.Clone();
foreach (DataRow Row in table.Select().Skip(i).Take(chunkSize))
{
Chunk.ImportRow(Row);
}
yield return Chunk;
}
}
}
該擴展方法的實施例的消費,具有從一個特設的測試輸出樣本:
class Program
{
static void Main(string[] args)
{
DataTable Table = GetTonsOfData();
foreach (DataTable Chunk in Table.Chunkify(100))
{
Console.WriteLine("{0} - {1}", Chunk.Rows[0][0], Chunk.Rows[Chunk.Rows.Count - 1][0]);
}
Console.ReadLine();
}
static DataTable GetTonsOfData()
{
DataTable Table = new DataTable();
Table.Columns.Add(new DataColumn());
for (int i = 0; i < 1000; i++)
{
DataRow Row = Table.NewRow();
Row[0] = i;
Table.Rows.Add(Row);
}
return Table;
}
}
我不使用這個分頁,但我只是實現了並行應用程序。如果您發現任何適用的重複項,請讓我知道,我會結束這個問題。 – 2009-04-20 17:54:47
你可以通過創建一個擴展方法來完成上述操作。然後,你可以使用 VAR大塊大塊來自於= table.Chunkify 選擇塊; – 2009-04-20 18:17:08
我喜歡這個主意,謝謝 – 2009-04-20 18:19:03