2

Linq 的新手,如果这是基本的,请道歉。当我枚举结果时,此查询抛出错误 {"Cannot cast DBNull.Value to type 'System.Int64'. Please use a nullable type."}。

    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 语句解决了这个问题。如果有人对性能差异有意见,我会很感兴趣。

4

2 回答 2

13

在您的查询中使用这一行:

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

decimal?是 的语法糖System.Nullable<decimal>,本质上与 相同decimal,除了它也允许null值。

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

于 2011-08-17T10:37:15.963 回答
0

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

于 2011-08-17T10:36:55.020 回答