2016-04-26 14 views
5

Próbuję kwerendy danych z F # SqlDataProvider ale mam dziwny błąd podczas chciałbym użyć funkcji GroupByF # GroupBy - System.Exception: metoda nierozpoznany wezwanie

mój kod startowych:

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() 

moje zapytanie:

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) 

mam ten błąd:

System.Exception: Metoda nierozpoznane połączenia w Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation (FSharpExpr e) w 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 @() w C: \ Development \ CountriesParser \ Script1.fsx: linia 36

Linia 36 to dokładna linia grupy.

Jak czytam w tych stronach, to powinno działać http://fsprojects.github.io/FSharp.Linq.ComposableQuery/QueryExamples.html https://msdn.microsoft.com/en-us/library/hh225374.aspx

+0

nie widzę niczego natychmiast źle tutaj - można zawierać które bibliotekami referencje i jakie przestrzenie nazw są otwarte? Jak powstaje wartość 'db'? –

+0

Edytowałem moje pytanie i dodałem kod przed zapytaniem, dziękuję –

Odpowiedz

2

Istnieje wiele różnych dostawców typu SQL dla F # i myślę, że Twój kod wykorzystuje jedną społeczność napędzany że nie obsługuje groupBy konstrukt w tym momencie.

  1. typu SqlDataProvider pochodzi SQLProvider opakowania i udokumentowano here.
  2. Biblioteka FSharp.Data.TypeProviders (dystrybuowana również w Visual Studio) jest dokumentowana here i udostępnia typ SqlDataConnection.
  3. Wspomniałeś także o bibliotece ComposableQuery udokumentowanej here, która jest rozszerzeniem, którego możesz użyć na górze (2), ale nie robisz tego w swoim kodzie.

Biblioteka (1) jest ładniejsza na wiele sposobów, ale nie obsługuje jeszcze pełnego języka zapytań, więc prawdopodobnie będziesz musiał (2) przełączyć.

Aby to zrobić, odniesienie tylko FSharp.Data.TypeProviders (nie trzeba dwa inne pakiety), a następnie użyć typu SqlDataConnection, po MSDN Walkthrough on the topic