为什么在使用IsNull条件时会出现NullReferenceException

本文关键字:NullReferenceException 条件 IsNull 为什么 | 更新日期: 2023-09-27 18:20:03

我必须加入两个不同的数据表,就像linq:一样

   // let use Linq
        var DateMarket = from p in IndexPrice.AsEnumerable()
                         join q in TickerPrice.AsEnumerable() on p.Field<DateTime>("DATE") equals q.Field<DateTime>("DATE") into UP
                         from q in UP.DefaultIfEmpty()
                         where p.Field<DateTime>("DATE") != null && !q.IsNull("CHG_PCT_1D")
                         select TestRecap.Rows.Add(p.Field<DateTime>("DATE"), q.Field<Double>("CHG_PCT_1D")) ;

然而,即使我使用条件:

  where p.Field<DateTime>("DATE") != null && !q.IsNull("CHG_PCT_1D")

我在这一行仍然有一个NullReferenceException。你知道为什么吗?

感谢

为什么在使用IsNull条件时会出现NullReferenceException

from q in UP.DefaultIfEmpty()表示,如果没有为您的p找到匹配的q,它将使用默认值,该值为null(与FirstOrDefault()SingleOrDefault()函数相同)。

检查q != null,它应该可以工作。

对于联接后的行,p和q中的一个可能为null。检查它们是否无效。

where p!=null 
   && p.Field<DateTime>("DATE") != null 
   && q != null 
   && !q.IsNull("CHG_PCT_1D")