首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么FSharp.Data.SqlClient记录作为对象公开?

为什么FSharp.Data.SqlClient记录作为对象公开?
EN

Stack Overflow用户
提问于 2015-06-09 20:28:45
回答 1查看 213关注 0票数 3

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

代码语言:javascript
复制
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返回一个可枚举的记录,而是返回一个对象的枚举:

代码语言:javascript
复制
IOrdersRepo repo = new OrdersRepo();
var data = repo.getOrdersPerEmployee(4).ToList();
data.ForEach(y => Console.WriteLine(y));
Console.ReadLine();

在上面的代码中,我介绍了如何在lambda中获得y上的intellisense,但是什么也没有。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-09 20:48:45

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30742218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档