Linq to DataTable - 无法强制转换DBNull

时间:2011-08-17 10:34:25

标签: c# linq casting dbnull

Linq的新手,如果这是基本的,请道歉。此查询抛出错误{“无法将DBNull.Value强制转换为'System.Int64'。请枚举结果时使用可空类型。”}。

    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
        }

    }

列ParentID确实接受空值 - 我是否需要单独处理这些?

EDIT2:以下仍然使用Linq的实际解决方案。

编辑:我通过废弃Linq并仅使用DataTable.Select语句解决了这个问题。如果有人对性能差异有所了解我会感兴趣。

2 个答案:

答案 0 :(得分:13)

在查询中使用此行:

where row.Field<decimal?>("ParentID") == rootid

decimal?System.Nullable<decimal>的语法糖,与decimal基本相同,只是它还允许null值。

long是一个完全不同的类型 - 它只能表示整数而不是十进制值,因此“指定的强制转换无效”错误。

答案 1 :(得分:0)

long rootid是可以为空的类型?它应该只是它可以接受空值