这是非常易读的,只能迭代序列一次,也许可以为您节省重复冗余Skip()
/ Take()
调用的相当糟糕的性能特征:
public IEnumerable> Chunkify(DataTable table, int size) { List chunk = new List (size); foreach (var row in table.Rows) { chunk.Add(row); if (chunk.Count == size) { yield return chunk; chunk = new List (size); } } if(chunk.Any()) yield return chunk; }
对于Linq的Skip and Take方法来说,这似乎是一个理想的用例,具体取决于你想要通过分块实现的目标.这是完全未经测试的,从未在IDE代码中输入,但您的方法可能看起来像这样.
private List> ChunkifyTable(DataTable table, int chunkSize) { List
> chunks = new List
>(); for (int i = 0; i < table.Rows.Count / chunkSize; i++) { chunks.Add(table.Rows.Skip(i * chunkSize).Take(chunkSize).ToList()); } return chunks; }