Hi folks,
I've got an interface to implement with methods like
GetById(id) : User
GetByName(name): User
GetByEmail(email) : User
GetByPhoneNumber(phoneNo): User
An implementation for any one of these might look like below, and each of them varies only in the where clause.
member this.GetById(id: string) =
conn.SelectAync<User> <| select {
from u in usersTable
where (u.Id = id)
}
I tried to write a small reusable function (below) to tidy things up, but I got a NotImplementedException from LinqExpressionVisitors.visitWhere on line 260
Relevant stack trace
Dapper.FSharp.SQLite.LinqExpressionVisitors.visit$cont@243-4(FSharpFunc<MemberInfo, string> qualifyColumn, Expression exp, BinaryExpression x, Unit unitVar) in C:\Dzoukr\Personal\Dapper.FSharp\src\Dapper.FSharp\SQLite\LinqExpressionVisitors.fs
Dapper.FSharp.SQLite.LinqExpressionVisitors.visit@200-30(FSharpFunc<MemberInfo, string> qualifyColumn, Expression exp) in C:\Dzoukr\Personal\Dapper.FSharp\src\Dapper.FSharp\SQLite\LinqExpressionVisitors.fs
Dapper.FSharp.SQLite.LinqExpressionVisitors.visitWhere<T>(Expression<Func<T, bool>> filter, FSharpFunc<MemberInfo, string> qualifyColumn) in C:\Dzoukr\Personal\Dapper.FSharp\src\Dapper.FSharp\SQLite\LinqExpressionVisitors.fs
Dapper.FSharp.SQLite.Builders+SelectExpressionBuilder<T>.Where(QuerySource<T> state, Expression<Func<T, bool>> whereExpression) in C:\Dzoukr\Personal\Dapper.FSharp\src\Dapper.FSharp\SQLite\Builders.fs
let findFirstBy<'t when 't: null> (conn: DbConnection) (tbl: QuerySource<'t>) (expr: 't -> bool) =
task {
let xs! = conn.SelectAsync<'t> <| select {
for x in tbl do
where (expr x)
}
match Seq.length xs with
| 0 -> return null
| _ -> return Seq.head xs
}
...
member this.GetById(id: string) = findFirstBy conn usersTable (fun u -> u.Id = id)
member this.GetByName(name: string) = findFirstBy conn usersTable (fun u -> u.Name = name)
What would be the correct way of implementing this? Or am I pursuing something that Dapper.FSharp wasn't designed to support?
Hi folks,
I've got an interface to implement with methods like
An implementation for any one of these might look like below, and each of them varies only in the
whereclause.I tried to write a small reusable function (below) to tidy things up, but I got a
NotImplementedExceptionfromLinqExpressionVisitors.visitWhereon line 260Relevant stack trace
What would be the correct way of implementing this? Or am I pursuing something that
Dapper.FSharpwasn't designed to support?