LINQ to SQL DataContext中的空引用异常

时间:2009-08-20 20:52:36

标签: c# linq-to-sql datacontext nullreferenceexception

我有一个由此代码引起的空引用异常:

var recentOrderers = (from p in db.CMS
            where p.ODR_DATE > DateTime.Today - new TimeSpan(60, 0, 0, 0)
            select p.SOLDNUM).Distinct();
result = (from p in db.CMS
             where p.ORDER_ST2 == "SH" &&
                   p.ODR_DATE > DateTime.Today - new TimeSpan(365, 0, 0, 0) &&
                   p.ODR_DATE < DateTime.Today - new TimeSpan(60, 0, 0, 0) &&
                   !(recentOrderers.Contains(p.SOLDNUM))/**/
             select p.SOLDNUM).Distinct().Count();

结果是双重类型。当我发表评论时:

!(recentOrderers.Contains(p.SOLDNUM))

代码运行正常。我已经验证了最近的提升者不是null,当我运行时:

if(recentOrderes.Contains(0)) return;

执行遵循此路径并返回。不知道发生了什么,因为我在它上面使用类似的代码:

var m = (from p in db.CMS where p.ORDER_ST2 == "SH" select p.SOLDNUM).Distinct();
            double result = (from p in db.CUST
                        join r in db.DEMGRAPH on p.CUSTNUM equals r.CUSTNUM
                        where p.CTYPE3 == "cmh" && !(m.Contains(p.CUSTNUM)) &&
                              r.ColNEWMEMBERDAT.Value.Year > 1900
                        select p.CUSTNUM).Distinct().Count();

也完美运行。注意到相似之处后,有人可以帮忙吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

我对Linq并不是很熟悉,但可能是。如果没有匹配的结果,.Distinct()会返回null吗?

答案 1 :(得分:0)

尝试通过转换为列表对象来解释从第一个查询中获取数据(实际上:使用.ToList()执行它)然后用于比较。

var recentOrderers = (from p in db.CMS
            where p.ODR_DATE > DateTime.Today - new TimeSpan(60, 0, 0, 0)
            select p.SOLDNUM).Distinct().ToList();