在LINQPad中编写F#查询

p.s*_*w.g 15 c# linq f# linqpad

我正在尝试使用F#来构建针对数据库的查询,但我甚至无法获得最简单的编译查询.

我可以像这样构造一个C#查询:

from c in Categories
select c
Run Code Online (Sandbox Code Playgroud)

一切正常.但是,当我尝试在F#中做同样的事情时:

query { for c in Categories do
        select c }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无效使用类型名称和/或对象构造函数.如有必要,使用'new'并将构造函数应用于其参数,例如' new Type(args)'.所需的签名是: Categories() : unit.

LINQPad捆绑了许多示例,但F#示例中没有一个实际显示如何使用它来查询数据库.我也浏览过互联网,但我找不到任何使用F#查询LINQPad数据库的例子.我在这里错过了什么?

Oce*_*t20 14

出于好奇,我决定尝试在LinqPad中使用F#.通过选择"F#Program"而不是F#表达,我能够让它工作.我确信只使用一个表达式是可能的,但我对F#100%不熟悉,所以我做得足以得到一个有效的例子.选择这个选项给了我一行:

let dc = new TypedDataContext()
Run Code Online (Sandbox Code Playgroud)

从那里,我按照这个示例页面来使这个查询工作/执行:

let dc = new TypedDataContext()

let query1 = query { for c in dc.MyTable do
                     select c }

query1
|> Seq.iter (fun x -> printfn "SomeField: %s" x.SomeField)
Run Code Online (Sandbox Code Playgroud)

  • 我想我可能会使用某种神奇的词; 结果是`dc`就是这样.在'F#Expression'模式中,`query {for c.在dc.Categories中选择c}`工作正常.谢谢你指点我正确的方向. (3认同)
  • 没问题.您可能还会注意到使用`dc.Categories`获得的关于不使用`this`关键字的警告.看起来像C#,`DataContext`实际上是作为`this`的范围,所以你可以做`this.Catagories`并摆脱警告. (2认同)