当实体查询没有结果时避免错误

时间:2011-03-14 17:38:34

标签: asp.net vb.net linq entity-framework

我有一个简单的实体查询:

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 个答案:

答案 0 :(得分: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,而不是抛出异常。

答案 1 :(得分:1)

使用FirstOrDefault而不是First。然后你可以设置默认返回