gpt4 book ai didi

f# - 为什么 FSharp.Data.SqlClient 记录作为对象公开?

转载 作者:行者123 更新时间:2023-12-05 01:11:11 26 4
gpt4 key购买 nike

我正在制作一个演示,其中我可以展示在 F# 库中使用 SqlClient 类型提供程序然后从 C# 使用它是多么容易,我认为这可能是将内容引入项目的一种方法。由于许多使用 C# 的人想要使用接口(interface)等。我想我向他们展示了可以组合所有内容,但我没有得到预期的结果。我有以下 F# 代码,它在 F# 中按预期工作:

module Orders = 
[<Literal>]
let connStr = """XXXXXXXXXXXX"""
type OrdersPerEmployee = SqlCommandProvider<"OrdersPerEmployee.sql", connStr>

open Orders
type IOrdersRepo =
abstract member getOrdersPerEmployee : int -> OrdersPerEmployee.Record seq
type OrdersRepo() =
interface IOrdersRepo with
member this.getOrdersPerEmployee(employeeId) =
let query = new OrdersPerEmployee()
query.Execute(employeeId)

但是当我尝试在我的 C# 应用程序中使用它时,我没有得到 getOrdersPerEmployee 返回一个可枚举的记录,而是返回一个可枚举的对象:

IOrdersRepo repo = new OrdersRepo();
var data = repo.getOrdersPerEmployee(4).ToList();
data.ForEach(y => Console.WriteLine(y));
Console.ReadLine();

在上面的代码中,我希望在 lambda 中获得关于 y 的智能感知,但什么也没有。有什么想法吗?

最佳答案

因为 SqlCommandProvider 是删除类型类。这意味着它生成的类型只能从 F# 中使用。相反,来自同一个 FSharp.Data.SqlClient 库的 SqlEnumProvider 是生成的类型,可以由 C# 使用(通过代理项目)。当 CLIEnum=true 时,它​​工作得特别好。有关已删除类型与生成类型的更深入讨论,请参阅 How do I create an F# Type Provider that can be used from C#?

关于f# - 为什么 FSharp.Data.SqlClient 记录作为对象公开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30742218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com