2011-03-14 70 views
0

我有一個簡單的實體查詢:避免出錯時,從實體查詢沒有結果

Dim rhcexists = From p In dbContracts.Signatures _ 
        Where p.StudentID = people_code_id _ 
        And p.ContractType = "rhc" _ 
        Order By p.ID Descending _ 
        Select p 

我再檢查的結果值中的一個是否比半年前使用if..then像這樣更近:

If rhcexists.First.SignatureDate > Date.Today.AddMonths(-6) Then 
End If 

但是,如果沒有返回結果,則會返回錯誤。如果沒有價值,我是否有辦法讓它像日期超過六個月那樣行事?例如,我能僞像做:

If Exists(rhcexists.First.SignatureDate, Date.Today.AddMonths(-8)) > Date.Today.AddMonths(-6) Then 

結束如果

回答

2

您使用的是First擴展方法,如果沒有結果,這會爆炸。你可以這樣做:

Dim first = rhcexists.FirstOrDefault() 
If first IsNot Nothing AndAlso first.SignatureDate > Date.Today.AddMonths(-6) Then 
    ' Do stuff here 
End If 

FirstOrDefault將返回Nothing如果沒有結果,而不是拋出異常。

+0

如何設置FirstOrDefault值是一個日期?它不斷回來說webHousing.Signatures不能成爲Date.Today。 – davemackey 2011-03-14 17:53:24

+1

@davemackey:目前尚不清楚你的意思。你在* query *上調用'FirstOrDefault()',所以結果將會是查詢返回的類型 - 猜測,簽名或類似的東西。請注意,在我的代碼中,我在'first'上使用'SignatureDate'屬性。 – 2011-03-14 17:55:10

+0

好吧,我將它更改爲您的代碼示例,但隨後出現運算符<>未爲此類型定義的錯誤(webHousing.Signature)。 – davemackey 2011-03-14 18:03:06

1

使用FirstOrDefault而不是First。然後你可以設置什麼樣的默認回報

+0

如何爲DefaultIfEmpty設置一個值?而且,特別是,如何將此值設置爲日期值?例如,如果我這樣做: rhcexists.DefaultIfEmpty(Date.Today) 我收到錯誤:「類型'Date'的值無法轉換爲webHousing.Signature」 – davemackey 2011-03-14 17:51:51