2012-02-13 137 views
1

我在这里有点困惑。如果我的查询没有返回任何为什么isnt coupon null?我应该如何检查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 
} 
+0

您正在使用SingleOrDefault,因此它将返回Coupon的一个实例,或者如果在您的集合中找不到任何内容,则返回null。 – ken2k 2012-02-13 09:57:51

+2

它实际上会返回默认(优惠券),这可能是一个新的优惠券,你可以重新定义你的对象的默认值 – 2012-02-13 10:01:52

回答

0

如果我的查询不返回任何东西,为什么心不是优惠券无效?

你的问题是触摸混乱。你是否说你正在执行那个查询,并且没有得到null值,尽管你认为不应该有结果?然后发生三件事之一:

  1. 你错了,没有结果。
  2. 你说得对,没有结果,但错误的是返回的价值不是null
  3. Coupon是一个结构。

我会给你怀疑的好处,并假设1.和2.不是这种情况。在最后一种情况下,coupon将收到Coupon实例的默认值。结构的默认值是将结构的所有字段设置为其默认值的结构。在这种情况下,你应该说

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

但你有棘手的问题在的Coupon默认实例可能是在你的数据库中的有效条目反正。如果我是你,我会重新考虑制作Coupon结构。

,我应该怎么检查空?

那么,如果Coupon是一个引用类型,正是你所拥有的是好的。如果Coupon是一个结构体,那么您将按照上面显示的那样进行检查。