for-loop - F# 查询表达式 : cannot use "for"!

标签 for-loop f# query-expressions

无论出于何种原因,我无法在查询表达式中使用“for”构造。我得到的是以下错误。我刚刚选择的代码曾经有效--> “错误:只有当计算表达式构建器定义了 'For' 方法时才可以使用此控制结构”

#r "System.Data.Linq.dll"
#r "FSharp.Data.TypeProviders.dll"

open FSharp.Linq
open FSharp.Data.TypeProviders

[<Literal>]
let connectionString' = @"
    data source = ...;
    initial catalog = NORTHWND;
    Integrated Security = SSPI"

type NorthwndDb =
    SqlDataConnection<connectionString', Pluralize = true>

let db' = NorthwndDb.GetDataContext()

let curstomerSortedByCountry =
    query { for c in db'.Customers do
                sortBy c.Country
                select (c.Country, c.CompanyName) } 
    |> Seq.cache

最佳答案

我无法使用您的代码片段来测试它(没有数据库来测试它),但我认为如果您定义了一个名为 query< 的变量,您报告的错误就会发生 代码片段中 query 表达式之前的某个位置。例如:

let query = "oops!"
let curstomerSortedByCountry =
    query { for c in [1 .. 10] do
            sortBy c
            select c } 

error FS0708: This control construct may only be used if the computation expression builder defines a 'For' method

原因是 query { .. } 中的标识符 query 只是标准 F# 库中声明的一个变量,该库具有各种成员,包括 查询。For。如果您用自己的声明隐藏此内容,则将找不到该成员。

关于for-loop - F# 查询表达式 : cannot use "for"!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631574/

相关文章:

python - 循环 sys.args

r - 如何在 R 中为这个嵌套的 for 循环编写更有效的代码?

events - F# 使用代理将历史事件与两个代理之间的模拟交互交错

linq - 在同一查询中使用 join 和 group By 的 F# 查询表达式

C++按升序对指针数组进行排序

python - 为什么不能按以下方式在for循环中使用多个语句?

.net - 理解byref、ref和&

f# - 在 F# 中如何实现 abs、sign 等

f# - 不带 for..in..do 的扩展计算表达式

SQL Server 查询奇怪的行为