当我真的想要"FirstOrNothing" vb.net 时,第一个或默认(时间)



在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()

最新更新