在LINQPad中编写F#查询

15

我想使用F#构建一个针对数据库的查询,但即使是最简单的查询也无法编译。

我可以像这样构建C#查询:

from c in Categories
select c

一切都运行正常。但是,当我尝试用F#执行应该相同的操作时:

query { for c in Categories do
        select c }
我遇到了以下错误:
“类型名称和/或对象构造函数的使用无效。如有必要,请使用“new”并将构造函数应用于其参数,例如“‘new Type(args)’”。所需签名为:Categories() : unit。”
LINQPad附带了许多示例,但是没有一个F#示例实际上展示了如何在数据库中使用它进行查询。我也在互联网上查找过,但是我找不到在LINQPad中使用F#查询数据库的任何示例。我在这里错过了什么?
2个回答

14

出于好奇,我决定尝试在LinqPad中使用F#编写一些东西。通过选择“F#程序”而不是F#表达式,我成功地让它工作了。我相信只使用表达式也是可能的,但我对F#完全不熟悉,所以我只做了足够多的工作来得到一个运行的示例。选择此选项给了我一个单行:

let dc = new TypedDataContext()

接下来,我按照这个示例页面进行操作,使查询开始工作/执行:

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)

3
我想可能有某种魔术词语我需要使用;结果发现dc就是它。在'F#表达式'模式下,query { for c in dc.Categories do select c }运行良好。感谢您指引我正确的方向。 - p.s.w.g
2
没问题。你可能也会注意到使用 dc.Categories 时收到的关于不使用 this 关键字的警告。看起来类似于 C#,DataContext 实际上是作用域限定在 this 上的,所以你可以使用 this.Catagories 来消除警告。 - Ocelot20

3

如果你想在LINQPad中将映射表作为F#表达式运行,只需要在映射表前加上"this."

query { for c in this.Categories do
        select c }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接