LINQ to Dataset DBNULL问题/ null引用异常

时间:2009-05-19 06:23:18

标签: c# linq dbnull

我有以下LINQ查询,当dtblDetail中的“备注”列为空时,总是会导致错误,即使我测试它是否为NULL。

var varActiveAndUsedElementsWithDetails =
                        from e in dtblElements
                        join d in dtblDetails on e.PK equals d.FK into set
                        from d in set.DefaultIfEmpty()
                        where (e.ElementActive == true)
                        select new
                        {
                            ElementPK = e.PK,
                            Remark = d.IsRemarkNull() ? null : d.Remark
                        };

错误消息是: “表'dtblDetails'中'Remark'列的值是DBNull。” 在为d.IsRemarkNull()添加测试之后,抛出了一个空引用异常。

你能帮我解决这个问题吗?

我已经检查了以下网站但除了我必须测试DBNULL之外没有找到任何有用的东西。但正如所说,这并不能解决我的问题。

3 个答案:

答案 0 :(得分:2)

问题是整个'd'项目都是空的。 因此调用'd.IsRemarkNull()'会导致空引用异常。 以下代码修复了问题:

var varActiveAndUsedElementsWithDetails =
                    from e in dtblElements
                    join d in dtblDetails on e.PK equals d.FK into set
                    from d in set.DefaultIfEmpty()
                    where (e.ElementActive == true)
                    select new
                    {
                        ElementPK = e.PK,
                        Remark = d == null? null : (d.IsRemarkNull() ? null : d.Remark)
                    };

答案 1 :(得分:0)

错误来自何处?是否有可能导致它的d.IsRemarkNull()?这种方法是什么样的?

也许:

DBNull.Value.Equals(d.Remark)

答案 2 :(得分:0)

也许这个字段在db中不允许null,为它获取默认值,并避免处理空值