2011-08-24 70 views
1

有一個值我用以下Linq到Entitiy爲了讓我的「siteconfig」實體的第一個也是唯一的記錄:可空對象必須在LINQ的

var site = unitofwork.SiteConfigRepository.Get().FirstOrDefault(); 

但是,當我的應用程序涉及到下面的代碼,拋出「可空對象必須有一個值」:

if (site!= null) { TimeSpan span = DateTime.Now.Subtract((DateTime)site.logindDate); } 

而在我的實體的唯一可空類型是一個名爲logindDate屬性是DateTime類型。

任何一個幫助我?

+2

這是拋出異常的確切行嗎?如果不是,請展開代碼並添加堆棧跟蹤。 – BrokenGlass

+0

是的,我在那裏放了一個斷點,當應用程序到達那個點時,拋出一個異常。 –

+0

看看這個問題:http://stackoverflow.com/questions/1896185/nullable-object-must-have-a-value – BAKeele

回答

2

嘗試這樣:

if (site!= null) 
{ 
    if (site.loginDate.HasValue) 
    { TimeSpan span = DateTime.Now.Subtract((DateTime)site.logindDate.Value); } 
} 

你是不是檢查空loginDate,我懷疑這可能是問題。記住,當你有一個可爲空的類型時,你需要檢查HasValue,然後從Value屬性中獲取值。

0

如果列表中沒有元素,IEnumerable.FirstOrDefault()將返回可枚舉或默認(T)(通常爲null,除非T是值類型)的第一個元素。很可能你的Get()返回一個空的枚舉。如果你確定總是有一個且只有一個元素返回的列表,你應該使用Single()(因爲那樣你將會有一個異常(如果確實發生了什麼)拋出該行),或者在 FirstOrDefault()之後針對null 進行測試。我認爲最好的例外是拋出或處理意外行爲的源頭,而不是幾行後。

+0

這不會解釋問題,因爲OP特別對'site'執行'null'檢查 – BrokenGlass

+0

我確定始終在列表返回的元素上,但是我將使用single並再次測試應用程序。 [編輯]使用Single()不起作用。 –

相關問題