2012-02-13 161 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是一個結構體,那麼您將按照上面顯示的那樣進行檢查。