在linq中,我试图返回基于一组标准的日期,或者,如果没有值,我想返回Nothing
。如果值为null (1-1-0001 12:00:00AM),则FirstOrDefault()
返回默认日期,这意味着.HasValue
将返回true。
如果我使用First()
,它抛出System.NotSupportedException
并建议我使用FirstOrDefault()
。
.Property = table.LinkedTableName.Where(Function(r) r.statusId = desiredStatusId) _
.Select(Function(r) r.Date) _
.OrderBy(Function(r) table.Date).FirstOrDefault()
这些都在Select New DataObject() With {}
我找到了一个自定义扩展:
<System.Runtime.CompilerServices.Extension()>
Public Function FirstOrNothing(Of T As Structure)(source As IEnumerable(Of T), _
match As Func(Of T, Boolean)) As Nullable(Of T)
For Each item In source
If match(item) Then
Return item
End If
Next
Return Nothing
End Function
我很想知道是否有任何内置的方法或更容易的方法来处理这个问题。
因为DateTime
是一个值类型,不能是nothing
,所以FirstOrDefault
不能返回nothing
。但是,在执行FirstOrDefault
DateTime
。(Function(r) Directcast(table.Date, DateTime?)).FirstOrDefault()