在linq中,我试图根据一组条件返回日期,或者,如果没有值,我想返回Nothing。如果值是null(1-1-0001 12:00:00 AM),则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 {}

我在上面找到了custom extension:
<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。但是,您可以先将其转换为可为空的DateTime,然后再进行FirstOrDefault

(Function(r) Directcast(table.Date, DateTime?)).FirstOrDefault()

关于vb.net - 当我真的想要 “FirstOrNothing” vb.net时使用FirstOrDefault(Of Time),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31612428/

10-13 00:52