Question

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)
    {
        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.

Était-ce utile?

La solution

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.

Autres conseils

long rootid is nullable type? It should be then only it can accept nulls

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top