С FastMember можете да направите това, без да е необходимо да преминавате през DataTable
(което в моите тестове повече от удвоява производителността):
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}
Имайте предвид, че ObjectReader
може да работи и с негенерични източници и не е необходимо да указвате имената на членовете предварително (въпреки че вероятно искате да използвате ColumnMappings
аспект на SqlBulkCopy
ако не ги посочите в ObjectReader
себе си).