c# - 不使用 AsEnumerable() 拆分 DataTable
问题描述
我正在编写一个 C# 脚本,它将在另一个使用 C# 编译器的项目中运行。该引擎没有被System.Data.DataSetExtensions
引用,也不允许这样做。
话虽如此,我仍然需要获取 100,000 行的 DataTable 并将其分解为最大 10,000 行的较小 DataSet。通常我会使用DataExtensions
类似 ..
var filteredDataTable = myDataTable.AsEnumerable().Take(10000).CopyToDataTable();
在不使用的情况下,什么是解决此问题的有效方法DataSetExtensions
?我应该放弃使用 aforeach loop
并将超过 10,000 行复制到 new 中DataTables
吗?
解决方案
我是否应该放弃使用 foreach 循环并将超过 10,000 行复制到新的 DataTables 中?
是的,您也可以考虑编写自己的扩展方法来对表进行切片并在需要时重用它。像下面的东西 -
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
推荐阅读
- java - 如何从下面有线程内容的消息中获取最新的消息内容?
- javascript - 错误类型错误:无法读取 null 的属性“0”| 角 7
- ios - 核心蓝牙:CBPeripheral 在不知不觉中断开连接并且没有接到任何对 didDisconnectPeripheral 的调用
- flutter - 没有有效的 Android SDK 平台
- ios - Swift:远程命令中心未显示在 lockScreen 中
- android - 模拟器上没有提示音
- java - ViewBinding 在充气后操纵视图
- angular - 在 Angular 中将服务放在哪里?CoreModules 还是 SharedModules?
- lambda - Apache Ignite 无法从远程节点序列化 lambda
- java - JSP 从 API 检索数据