F#Linq to sql - 调用存储过程

时间:2011-05-13 13:01:48

标签: linq-to-sql f#

我之前在一些参数中不需要使用视图,但是现在我需要它并且它失败了或者我做错了。

这是我的尝试:

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

参数得到了比特类型。 Linq将它转换为Nullable(不知道为什么可以为空),所以我在那里传递值并且它失败了

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

调用存储过程(作为DataContext的方法公开)时,您不需要将调用包装在引号内。它可以作为普通方法执行(没有query):

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

您还可以使用序列推导seq { ... }或数组推导[| ... |]来进行额外处理 - 可能 - 更好一点:

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