实体框架不返回null

时间:2012-02-13 09:54:32

标签: c# entity-framework

我在这里有点困惑。如果我的查询没有返回任何为什么不是优惠券null?我该如何检查null?

Coupon coupon;

using (var db = new KupongEntities())
{
    coupon = (from p in db.Coupon
        where p.CouponID == 123
        select p).SingleOrDefault();
}

if (coupon != null)
{
    //test
}

1 个答案:

答案 0 :(得分:0)

  

如果我的查询没有返回任何原因,为什么不是优惠券null?

你的问题令人困惑。您是说您正在执行该查询而不是获得null值,尽管您认为不应该有结果?然后发生了三件事之一:

  1. 你错了,没有结果。
  2. 你没有结果,但错误的是返回的值不是null
  3. Coupon是一个结构。
  4. 我会给你怀疑的好处,并假设1.和2.不是这样。在最后一种情况下,coupon将收到Coupon实例的默认值。结构的默认值是将结构的所有字段设置为其默认值的结构。在这种情况下,你应该说

    if(coupon != default(Coupon)) {
    }
    

    但是你有一个讨厌的问题,即Coupon的默认实例可能是你数据库中的有效条目。如果我是你,我会重新考虑制作Coupon结构。

      

    我应该如何检查null?

    好吧,如果Coupon是参考类型,那么你所拥有的就是好的。如果Coupon是一个结构,你可以按照我上面的说明进行检查。