Ermitteln Sie einen IDataReader aus einer typisierten Liste

Ich habe eine List<MyObject> mit einer million Elementen. (Es ist eigentlich ein SubSonic-Sammlung, aber es wird nicht aus der Datenbank geladen).

Ich bin derzeit mit SqlBulkCopy wie folgt:

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;
}

Ich nutze SubSonic ist MyObjectCollection.ToDataTable() zum erstellen der DataTable aus meiner Sammlung. Jedoch, diese Duplikate Objekte im Speicher und ist ineffizient. Ich würde gerne die SqlBulkCopy.WriteToServer-Methode verwendet IDataReader statt einer DataTable, damit ich nicht doppelte meiner Sammlung in Erinnerung.

Was ist der einfachste Weg zu einem IDataReader von meiner Liste? Ich nehme an, ich konnte bei der Implementierung einer benutzerdefinierten Daten-reader (wie hier http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/05/06/implementing-sqlbulkcopy-in-linq-to-sql.aspx) , aber es muss doch etwas einfacheres kann ich tun ohne das schreiben eine Reihe von generischen code.

Bearbeiten:
Es scheint nicht, dass man kann einfach erzeugen einem IDataReader aus einer Sammlung von Objekten.
Akzeptieren Sie Ihre Antwort, obwohl ich hatte gehofft, für etwas, das gebaut in den Rahmen.

InformationsquelleAutor der Frage Jason Kealey | 2010-02-13

Schreibe einen Kommentar