2017-10-08 2 views
3

何らかの理由で、私はクエリ式内で "for"構造体を使用することはできません。私が得るのは次のエラーです。コードI私が働いていることを選んだだけで何 - > 「エラー:計算式ビルダは、メソッド 『の』定義されている場合、この制御構造にのみ使用することができる」F#クエリ式: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 
+0

奇妙なことに、これはあるスクリプトでは発生し、別のスクリプトでは発生しません。 –

答えて

6

は、私がテストすることができませんでしたあなたのコードスニペット(これをテストするデータベースはありません)がありますが、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 { .. }内の識別子queryquery.For含む様々なメンバーを持っている標準のF#ライブラリで宣言されたばかりの変数があるということです。あなた自身の宣言でこれを隠すと、メンバーは見つからないでしょう。

+0

Tomas、ありがとう、これと、言語を促進し、質問に答えるなどのあなたのすべての苦労のために。はい、それが問題でした。ところで、SQLクエリをF#クエリ式に変換するツールが存在しますか? –

+0

私は助けることができてうれしいです - 私はSQL - > F#のクエリツールがあるとは思わない - それはおそらく高い需要はありません。 –

関連する問題