F#中的Dapper点网查询

问题描述 投票:8回答:2

我试图在F#中使用Dapper dot net来执行一个简单的SQLite查询.Dapper返回一个动态对象的集合:在C#中使用它们是直接的,但根据我的理解,F#没有开箱即用的动态属性查询实现。

这样做是可行的,但我想有更好的方法来做这件事,而不求助于反射。

let (?) x prop =
    let flags = BindingFlags.GetProperty ||| BindingFlags.InvokeMethod
    x.GetType().InvokeMember(prop, flags, null, x, [||])

let doQuery () =
    //...
    let conn = new SQLiteConnection (connString)
    conn.Open ()

    conn.Query("select first_name from customers")
        |> Seq.map (fun c -> c ? first_name)
        |> List.ofSeq

在这种情况下,实现?操作符的最好方法是什么?

f# dapper
2个回答
7
投票

这个线程 由几种解决方案组成,可以解决您的问题。特别是: FSharp.Interop.Dynamic 已在NuGet上提供,并可随时使用。


1
投票

当使用F#的Dapper时,你可以使用下面的命令来指定你的查询参数。F#匿名记录 并将结果直接映射到一个F#记录上,像这样。

[<CLIMutable>]
type CustomerDto = 
    {
        FirstName: string
    }

let selectSql = "select first_name as FirstName from customers where first_name = @firstName"

conn.Query<CustomerDto>(selectSql, {|firstName = "Francesco"|})

注意,F#匿名记录是在 F# 4.6.

© www.soinside.com 2019 - 2024. All rights reserved.