当我使用IsNull条件时,为什么会出现NullReferenceException?

时间:2012-01-10 07:44:15

标签: c# nullreferenceexception isnull

我必须加入2个不同的数据表,例如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。你知道为什么吗?

由于

2 个答案:

答案 0 :(得分:1)

from q in UP.DefaultIfEmpty()表示,如果找不到与您的q匹配的p,则会使用默认值,该值为空(与FirstOrDefault()相同,且SingleOrDefault()函数)。

检查q != null,它应该有效。

答案 1 :(得分:0)

加入后,p和q中的一个对于行可能为null。检查它们的无效。

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