不使用 AsEnumerable() 拆分 DataTable
Split DataTable without using AsEnumerable()
我正在编写一个 C# 脚本,它将 运行 放在另一个使用 C# 编译器的项目中。此引擎没有 System.Data.DataSetExtensions
引用,也不允许这样做。
话虽这么说,我仍然需要将一个 100,000 行的数据表分解成最多 10,000 行的较小数据集。通常我会将 DataExtensions
与类似 ..
一起使用
var filteredDataTable = myDataTable.AsEnumerable().Take(10000).CopyToDataTable();
在不使用 DataSetExtensions
的情况下,有什么有效的方法可以解决这个问题?我应该放弃使用 foreach loop
并将 10,000 多行复制到新的 DataTables
中吗?
Should I be resigned to using a foreach loop and copying over 10,000
rows into new DataTables?
是的,您也可以考虑编写自己的扩展方法来分割 table 并在需要时重用它。像下面这样的东西 -
public DataTable SliceTable(this DataTable dt, int rowsCount, int skipRows=0)
{
DataTable dtResult = dt.Clone();
for (int i = skipRows; i < dt.Rows.Count && rowsCount > 0; i++)
{
dtResult.ImportRow(dt.Rows[i]);
rowsCount --;
}
return dtResult;
}
使用-
DataTable myData; -- Original table
var slice1 = myData.SliceTable(1000); // get slice of first 1000 rows
var slice2 = myData.SliceTable(1000,1000); // get rows from 1001 to 2000
var slice3 = myData.SliceTable(1000,2000); // get rows from 2001 to 3000
我正在编写一个 C# 脚本,它将 运行 放在另一个使用 C# 编译器的项目中。此引擎没有 System.Data.DataSetExtensions
引用,也不允许这样做。
话虽这么说,我仍然需要将一个 100,000 行的数据表分解成最多 10,000 行的较小数据集。通常我会将 DataExtensions
与类似 ..
var filteredDataTable = myDataTable.AsEnumerable().Take(10000).CopyToDataTable();
在不使用 DataSetExtensions
的情况下,有什么有效的方法可以解决这个问题?我应该放弃使用 foreach loop
并将 10,000 多行复制到新的 DataTables
中吗?
Should I be resigned to using a foreach loop and copying over 10,000 rows into new DataTables?
是的,您也可以考虑编写自己的扩展方法来分割 table 并在需要时重用它。像下面这样的东西 -
public DataTable SliceTable(this DataTable dt, int rowsCount, int skipRows=0)
{
DataTable dtResult = dt.Clone();
for (int i = skipRows; i < dt.Rows.Count && rowsCount > 0; i++)
{
dtResult.ImportRow(dt.Rows[i]);
rowsCount --;
}
return dtResult;
}
使用-
DataTable myData; -- Original table
var slice1 = myData.SliceTable(1000); // get slice of first 1000 rows
var slice2 = myData.SliceTable(1000,1000); // get rows from 1001 to 2000
var slice3 = myData.SliceTable(1000,2000); // get rows from 2001 to 3000