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

USE*_*309 2 linq vb.net

在 linq 中,我试图根据一组条件返回日期,或者,如果没有我想返回的值NothingFirstOrDefault()如果值为空(1-1-0001 12:00:00AM),则返回默认日期,这意味着.HasValue将返回 true。

如果我使用First(),它会抛出 aSystem.NotSupportedException并建议我FirstOrDefault()改用。

.Property = table.LinkedTableName.Where(Function(r) r.statusId = desiredStatusId) _
.Select(Function(r) r.Date) _
.OrderBy(Function(r) table.Date).FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)

这一切都在一个 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
Run Code Online (Sandbox Code Playgroud)

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

Mag*_*nus 5

由于DateTime是值类型,不能nothing FirstOrDefault不能不返回nothing。但是,您可以DateTime在执行之前将其强制转换为可空值FirstOrDefault

(Function(r) Directcast(table.Date, DateTime?)).FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)

  • 当序列为空时,可空字段上使用的“FirstOrDefault()”将返回“Nothing”。 (2认同)