在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/