The following code
open System
type UserSession = {
Id: string
CreatedAt: DateTime
LastRefreshAt: DateTime option
}
type Base () =
let sessions = [{Id="1"; CreatedAt=DateTime.Now.AddMonths(-1); LastRefreshAt=None};
{Id="2"; CreatedAt=DateTime.Now.AddMonths(-1); LastRefreshAt=Some(DateTime.Now)};
{Id="3"; CreatedAt=DateTime.Now.AddMonths(-1); LastRefreshAt=Some(DateTime.Now.AddDays(-15))}]
member this.Delete (f : UserSession -> bool) =
List.map f sessions
type Derived () =
inherit Base()
member this.DeleteAbandoned1 (olderThan:DateTime) =
base.Delete (fun session ->
session.CreatedAt < olderThan &&
// error: Value is not a property of UserSession
(session.LastRefreshAt.IsNone || session.LastRefreshAt.Value < olderThan)
)
member this.DeleteAbandoned2 (olderThan:DateTime) =
base.Delete (fun session ->
session.CreatedAt < olderThan &&
// error: Value is not a property of UserSession
(session.LastRefreshAt.IsNone || session.LastRefreshAt < Some(olderThan))
)
let t = Derived ()
printfn "%A" (t.DeleteAbandoned1(DateTime.Now.AddDays(-14)))
printfn "%A" (t.DeleteAbandoned2(DateTime.Now.AddDays(-14)))
will output
[true; false; true]
[true; false; true]
val it: unit = ()
in .Net 9, i.e. both versions of your DeleteAbandoned seem to work. Both in FSI and compiled version as well. So there seems to be something else going on in your code. Could you provide some additional details?