FirstOrDefault(Of Time)当我真的想要“FirstOrNothing”vb.net时

时间:2015-07-24 13:56:29

标签: vb.net linq

在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

我很想知道是否有任何内置方法或更简单的方法来处理这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:4)

由于DateTime是值类型,因此无法nothing FirstOrDefault无法返回nothing。但是,在执行DateTime

之前,您可以将其转换为可为空的FirstOrDefault
(Function(r) Directcast(table.Date, DateTime?)).FirstOrDefault()