C# LINQ到SQL DataContext中出现空引用异常

C# LINQ到SQL DataContext中出现空引用异常,c#,linq-to-sql,datacontext,nullreferenceexception,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" &&a

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

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();
代码运行良好。我已验证RecentOrders不为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();

它的运行也完美无缺。注意到相似之处后,有人能帮忙吗?提前感谢。

我对Linq不是很熟悉,但可能是这样。如果没有匹配的结果,Distinct将返回null?

尝试通过转换为实际的列表对象来明确从第一个查询中获取数据:使用.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();

生成的SQL看起来像什么?我假设这是LINQtoSQL或LINQtoEntities。Jon:这是SQL的延迟执行吗?这很有效!虽然我还是不明白其中的区别。因为在你的例子中,你的第一个查询是一种IQueryable类型,它本身不是一个真正的值——它只是一个查询定义。将查询定义视为数据不是一个好主意;-尽量避免使用“var”,并在将来使用具体类型来避免此类问题。使用var与此无关。它仍然是强类型的。
var recentOrderers = (from p in db.CMS
            where p.ODR_DATE > DateTime.Today - new TimeSpan(60, 0, 0, 0)
            select p.SOLDNUM).Distinct().ToList();