SqlProvider使用“无法识别的方法调用”查询错误

时间:2016-04-01 15:53:44

标签: postgresql f# type-providers fsharp.data.typeproviders

环境:

  • Windows 10
  • PostgresSQL 9.5
  • .NET 4.6.1
  • Npgsql 3.0.5
  • SQLProvider 0.0.11-alpha

以下查询:

 query {
        for timing in db.Public.Timings do
        leftOuterJoin sensor in db.Public.Sensors on (timing.Transpondercode = sensor.Sensorcode) into r1            
        select timing
    }        

返回:

System.Exception: unrecognised method call
at Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation(FSharpExpr e)
at Microsoft.FSharp.Linq.QueryModule.EvalNonNestedInner(CanEliminate canElim, FSharpExpr queryProducingSequence)   
at Microsoft.FSharp.Linq.QueryModule.clo@1735-1.Microsoft-FSharp-Linq-ForwardDeclarations-IQueryMethods-Execute[a,b](FSharpExpr`1 )
at AlphaFront.Db.getTimings(Double startTime, Double endTime) in C:\projects\AlphaFront\AlphaFront\Db.fs:line 488

其他查询(包括联接)一直运行良好,但这是我尝试过的第一个左连接。

编辑:我已将代码示例简化为最小的再现示例。

1 个答案:

答案 0 :(得分:3)

看起来截至2015年10月15日,leftOuterJoin不受SqlProvider支持

github

引用维护者pezipink
  

对于外连接,不支持leftOuterJoin关键字,因为它要求我们实现groupJoin,而groupJoin又需要一些尚未完成的其他东西。如果您的连接位于具有外键设置的字段之间,则可以使用for ..语法中的特殊(!!)运算符将其连接到左连接,例如,对于prod in(!!)table1.MyForeignKey do ... < / p>