Linq to DataTable - Cannot cast DBNull
New to Linq, so apologies if this is basic. This query is throwing up the error {"Cannot cast DBNull.Value to type 'System.Int64'. Please use a nullable type."} when I enumerate the results.
private void AddLevels(long rootid)
开发者_JS百科 {
var results = from row in data.AsEnumerable()
where row.Field<long>("ParentID") == rootid
select row;
foreach (DataRow row in results)
{
//do stuff
}
}
The column ParentID does accept nulls - do I need to handle these separately?
EDIT2: Actual solution below that still uses Linq.
EDIT: I solved this by scrapping Linq and just using a DataTable.Select statement instead. If anyone's got input on the performance difference I'd be interested.
Use this line in your query:
where row.Field<decimal?>("ParentID") == rootid
decimal?
is syntactic sugar for System.Nullable<decimal>
, which is essentially the same as decimal
, except that it also allows for null
values.
long
is a different type altogether -- it can only represent integers and not decimal values, hence the "Specified cast is not valid" error.
long rootid is nullable type? It should be then only it can accept nulls
精彩评论