实体框架不返回null

本文关键字:null 返回 框架 实体 | 更新日期: 2023-09-27 18:24:23

我有点困惑。如果我的查询没有返回任何内容,为什么优惠券不是空的?我应该如何检查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
}

实体框架不返回null

如果我的查询没有返回任何内容,为什么优惠券不是空的?

你的问题有点令人困惑。你是说,尽管你认为不应该有结果,但你正在执行那个查询,却没有得到null值吗?然后发生了三件事之一:

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

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

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

但是,您会遇到一个严重的问题,Coupon的默认实例可能是数据库中的一个有效条目。如果我是你的话,我会重新考虑把Coupon作为一个结构。

我应该如何检查null?

好吧,如果Coupon是一个引用类型,那么你所拥有的就是好的。如果Coupon是一个结构,您应该像上面显示的那样进行检查。