Today I needed to use SqlBulkCopy class passing an IEnumerable<T> as a source instead of a IDataReader. Before writing something that someone else could have already written, I made some search and I found this interesting post that solve exactly this issue. In the post there is also a link to source code. Take also a look at performance optimization for getter as described in post comment.