在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
我很想知道是否有任何内置方法或更简单的方法来处理这个问题。提前谢谢。
答案 0 :(得分:4)
由于DateTime
是值类型,因此无法nothing
FirstOrDefault
无法返回nothing
。但是,在执行DateTime
FirstOrDefault
(Function(r) Directcast(table.Date, DateTime?)).FirstOrDefault()