0

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

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 之外没有发现任何有用的东西。但正如所说,这并不能解决我的问题。

4

3 回答 3

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)
                    };
于 2009-05-25T09:14:48.743 回答
0

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

也许:

DBNull.Value.Equals(d.Remark)
于 2009-05-19T06:43:06.647 回答
0

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

于 2009-05-19T10:35:19.200 回答