cnd
cnd

Reputation: 33764

F# Linq to sql - call stored procedure

I used view here before I was not needed in some parameter, but now I need it and it fails or maybe I'm making something wrong.

here is my try :

member X.CountStatistics ha = 
    <@ linq.IncidentStatistix(ha) @>
    |> query 
    |> Seq.map (fun s -> s.Name, s.Stat)
    |> Array.ofSeq

Parameter got bit type. Linq converted it as Nullable (no idea why nullable) and so I pass value there and it fails with

The following construct was used in query but is not recognised by the F#-to-LINQ query translator:
Call (Some (FieldGet (Some (Value (IncidentStats+ins)), LinqBase.FRIIB linq)),
      System.Data.Linq.ISingleResult`1[LinqBase.IncidentStatistixResult] IncidentStatistix(System.Nullable`1[System.Boolean]),
      [Value (false)])
This is not a valid query expression. Check the specification of permitted queries and consider moving some of the query out of the quotation

what am I doing wrong ?

Upvotes: 2

Views: 531

Answers (1)

Tomas Petricek
Tomas Petricek

Reputation: 243061

When calling stored procedure (exposed as a method of DataContext), you don't need to wrap the call inside quotations. It can be executed as a normal method (without query):

member X.CountStatistics ha = 
    linq.IncidentStatistix(ha)
    |> Seq.map (fun s -> s.Name, s.Stat)    
    |> Array.ofSeq

You can also use sequence comprehensions seq { ... } or array comprehensions [| ... |] to make the additional processing - maybe - a bit nicer:

member X.CountStatistics ha = 
    [| for s in linq.IncidentStatistix(ha) -> s.Name, s.Stat |]

Upvotes: 1

Related Questions