如何使用 F# return 在 Dapper 中将表连接为强类型记录
How to return Joined Tables as Strongly Typed Records in Dapper with F#
这个库不能满足我的需求https://github.com/Dzoukr/Dapper.FSharp所以我想直接从 F# 使用 Dapper
我想可能是我对F#了解不够,C#是怎么翻译的。
在此页面中 https://www.learndapper.com/relationships 我正在尝试为那里的一对多关系建模
var products = await connection.QueryAsync<Product, Category, Product>(sql, (product, category) => {
product.Category = category;
return product;
},
splitOn: "CategoryId" );
这是我的尝试(失败且未完全完成)。如何将以上内容“翻译”成 F#?
conn.QueryAsync<Order,OrderDetail, Order>(orderSql,(fun (order,orderDetail) -> (order, orderDetail )))
(这甚至不是可以编译的代码——甚至不知道从哪里开始)
下面是将示例直接翻译成 F# 的版本:
open System.Data.SqlClient
open Dapper
[<CLIMutable>]
type Product =
{
ProductId : int
ProductName : string
mutable Category : Category
}
and [<CLIMutable>]
Category =
{
CategoryId : int
CategoryName : string
Products : Product[]
}
[<EntryPoint>]
let main argv =
use connection = new SqlConnection("Server=localhost;Database=Northwind;Trusted_Connection=True;")
let sql = "select productid, productname, p.categoryid, categoryname \
from products p \
inner join categories c on p.categoryid = c.categoryid"
let products =
async {
return!
connection.QueryAsync(
sql,
(fun product category ->
product.Category <- category
product),
splitOn = "CategoryId")
|> Async.AwaitTask
} |> Async.RunSynchronously
printfn "%A" products
0
这不是真正地道的 F#(例如,由于可变字段),但它确实有效。
这个库不能满足我的需求https://github.com/Dzoukr/Dapper.FSharp所以我想直接从 F# 使用 Dapper
我想可能是我对F#了解不够,C#是怎么翻译的。
在此页面中 https://www.learndapper.com/relationships 我正在尝试为那里的一对多关系建模
var products = await connection.QueryAsync<Product, Category, Product>(sql, (product, category) => {
product.Category = category;
return product;
},
splitOn: "CategoryId" );
这是我的尝试(失败且未完全完成)。如何将以上内容“翻译”成 F#?
conn.QueryAsync<Order,OrderDetail, Order>(orderSql,(fun (order,orderDetail) -> (order, orderDetail )))
(这甚至不是可以编译的代码——甚至不知道从哪里开始)
下面是将示例直接翻译成 F# 的版本:
open System.Data.SqlClient
open Dapper
[<CLIMutable>]
type Product =
{
ProductId : int
ProductName : string
mutable Category : Category
}
and [<CLIMutable>]
Category =
{
CategoryId : int
CategoryName : string
Products : Product[]
}
[<EntryPoint>]
let main argv =
use connection = new SqlConnection("Server=localhost;Database=Northwind;Trusted_Connection=True;")
let sql = "select productid, productname, p.categoryid, categoryname \
from products p \
inner join categories c on p.categoryid = c.categoryid"
let products =
async {
return!
connection.QueryAsync(
sql,
(fun product category ->
product.Category <- category
product),
splitOn = "CategoryId")
|> Async.AwaitTask
} |> Async.RunSynchronously
printfn "%A" products
0
这不是真正地道的 F#(例如,由于可变字段),但它确实有效。