我的代码如下:
IEnumerable<A> data = GetData();
DataTable dataTable = ConvertDataToDataTable(data);
...//initialize SqlBulkCopy
sqlBulkCopy.WriteToServer(dataTable);
但我不希望在DataTable的内存中构建整个数据源。我认为这会更好:
IEnumerable<A> data = GetData();
IDataReader dataReader = ConvertDataToDataReader(data);
...//initialize SqlBulkCopy
sqlBulkCopy.WriteToServer(dataReader);
假设数据只会在内存中积累到sqlBulkCopy.BatchSize,然后在写入SQL Server后被丢弃(并且它会运行得更快,因为它可以尽快开始写入SQL Server第一批数据可用。)
然而,IDataReader界面非常庞大,我不愿意自己实现它。
还有其他任何解决方案,或者那些可能帮助我像IEnumerable上的ToDataReader()扩展方法的东西吗?
编辑: 好的,这是Get an IDataReader from a typed List的重复问题。看起来必须从头开始实现IDataReader,框架中没有任何内置或定期更新的NuGet包。