当前位置:  开发笔记 > 编程语言 > 正文

Linq to DataTable - 无法强制转换DBNull

如何解决《LinqtoDataTable-无法强制转换DBNull》经验,为你挑选了1个好方法。

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

    private void AddLevels(long rootid)
    {
        var results = from row in data.AsEnumerable()
                      where row.Field("ParentID") == rootid
                      select row;

        foreach (DataRow row in results)
        {
            //do stuff
        }

    }

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

EDIT2:下面的实际解决方案仍然使用Linq.

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



1> Donut..:

在查询中使用此行:

where row.Field("ParentID") == rootid

decimal?是语法糖System.Nullable,它基本上是相同的decimal,除了它还允许null值.

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

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有