F#groupBy - System.Exception:无法识别的方法调用

时间:2016-04-26 12:17:02

标签: linq f#

我尝试使用F#SqlDataProvider查询数据,但是当我想使用groupBy函数时出现了奇怪的错误

我的初始代码:

r# "packages/FSharp.Data.2.2.5/lib/net40/FSharp.Data.dll"
r# "packages/SQLProvider.1.0.0/lib/FSharp.Data.SQLProvider.dll"
r# "packages/FSharp.Data.TypeProviders.5.0.0.2/lib/net40/FSharp.Data.TypeProviders.dll"

open FSharp.Data
open FSharp.Data.Sql
open FSharp.Data.TypeProviders
open FSharp.Linq
open System.Text.RegularExpressions
open System
open System.Data

type dbSchema = SqlDataProvider<
                    ConnectionString = "my-connection-string",
                    DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER,
                    IndividualsAmount = 1000,
                    UseOptionTypes = true>
let db = dbSchema.GetDataContext()

我的疑问:

query {
    for county in db.Dbo.Countries do
    groupBy county.CountryCode into g
    select (g.Key, g.Count())
    } |> Seq.iter (fun (key, count) -> printfn "%s %d" key count)

我收到了这个错误:

  

System.Exception:无法识别的方法调用      在Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation(FSharpExpr e)      在Microsoft.FSharp.Linq.QueryModule.EvalNonNestedInner(CanEliminate canElim,FSharpExpr queryProducingSequence)      在Microsoft.FSharp.Linq.QueryModule.clo @ 1735-1.Microsoft-FSharp-Linq-ForwardDeclarations-IQueryMethods-Executea,b      at。$ FSI_0003.main @()in C:\ Development \ CountriesParser \ Script1.fsx:line 36

第36行是groupBy的确切行。

正如我在这些页面中读到的那样,它应该可行 http://fsprojects.github.io/FSharp.Linq.ComposableQuery/QueryExamples.html https://msdn.microsoft.com/en-us/library/hh225374.aspx

1 个答案:

答案 0 :(得分:2)

F#有许多不同的SQL类型提供程序,我认为您的代码使用的是社区驱动的代码,目前不支持groupBy构造。

  1. SqlDataProvider类型来自SQLProvider个包,并记录在案here
  2. FSharp.Data.TypeProviders库(也随Visual Studio一起分发)记录在案here并公开SqlDataConnection类型。
  3. 您还提到了记录here的ComposableQuery库,这是一个可以在(2)之上使用的扩展,但您在代码中没有这样做。
  4. 库(1)在很多方面都比较好,但是还不支持完整的查询语言,所以你可能需要切换到(2)。

    为此,请仅引用FSharp.Data.TypeProviders(您不需要其他两个包),然后在MSDN Walkthrough on the topic

    之后使用SqlDataConnection类型