在 linq 中,我试图根据一组条件返回日期,或者,如果没有我想返回的值Nothing。 FirstOrDefault()如果值为空(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)
我很想知道是否有任何内置方法或更简单的方法来处理这个问题。提前致谢。
由于DateTime是值类型,不能nothing FirstOrDefault不能不返回nothing。但是,您可以DateTime在执行之前将其强制转换为可空值FirstOrDefault
(Function(r) Directcast(table.Date, DateTime?)).FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)