Ottieni un IDataReader da un elenco digitato

Ho una List con un milione di elementi. (In realtà è una Collezione SubSonic ma non è caricata dal database).

Attualmente sto usando SqlBulkCopy come segue:

 private string FastInsertCollection(string tableName, DataTable tableData) { string sqlConn = ConfigurationManager.ConnectionStrings[SubSonicConfig.DefaultDataProvider.ConnectionStringName].ConnectionString; using (SqlBulkCopy s = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.TableLock)) { s.DestinationTableName = tableName; s.BatchSize = 5000; s.WriteToServer(tableData); s.BulkCopyTimeout = SprocTimeout; s.Close(); } return sqlConn; } 

Uso SubSonic’s MyObjectCollection.ToDataTable () per creare il DataTable dalla mia collezione. Tuttavia, questo duplica gli oggetti in memoria ed è inefficiente. Mi piacerebbe utilizzare il metodo SqlBulkCopy.WriteToServer che utilizza un IDataReader invece di un DataTable in modo da non duplicare la mia raccolta in memoria.

Qual è il modo più semplice per ottenere un IDataReader dalla mia lista? Suppongo di poter implementare un lettore di dati personalizzato (come qui http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/05/06/implementing-sqlbulkcopy-in-linq-to-sql.aspx ) , ma ci deve essere qualcosa di più semplice che posso fare senza scrivere un mucchio di codice generico.

Modifica: non sembra che si possa facilmente generare un IDataReader da una collezione di oggetti. Accettare la risposta attuale anche se speravo in qualcosa di costruito nel framework.