Why is my LINQ query ("rows") showing up as a null when it seems like I have plenty of data ("waypoints")?
I'm doing an insert of ~20k records and rather than go through Entity Framework I've opted for SqlBulkCopy, which seems to mean I need a datatable. I'm trying to get an IEnumerable into IEnumberable as that seems to be the only way to get CopyToDataTable().
I was copying the syntax in this answer, and you can see in my debugger that I have plenty of objects in my original list but IEnumerable is null.
Same code, maybe easier to read:
IEnumerable<DataRow> rows =
(from w in waypoints.AsEnumerable()
select w) as IEnumerable<DataRow>;
DataTable table = rows.CopyToDataTable();
The "rows" variable is returning as null.
You are trying to typecase an IEnumerable<Waypoint>
as an IEnumerable<DataRow>
, which is not going to work unless your Waypoint
class is derived from DataRow
, which I assume it's not. The documentation for the CopyToDataTable
method is pretty clear:
The parameter T of the input parameter source can only be of type DataRow or a type derived from DataRow.
You are going to have to make your data table the long way, unfortunately. Make a new blank DataTable
, add columns to it's Columns
collection, then add rows to it's Rows
collection.