Linq2db: F# query builder issue with leftOuterJoin

Created on 20 Aug 2016  路  1Comment  路  Source: linq2db/linq2db

following query fails with NotImplementedException

    let child = query {
        for child in children do
        leftOuterJoin parent in parents
            on (child.ParentID = parent.ParentID) into result
        for parent in result do
        where (parent.Value1 = 6)
        select child
        headOrDefault
    }

it seems that leftOuterJoin operator inserts call to DefaultIfEmpty in unexpected place and linq2db can't handle this.

   at LinqToDB.Linq.Builder.SelectContext.GetContext(Expression expression, Int32 level, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\SelectContext.cs:line 802
   at LinqToDB.Linq.Builder.SelectContext.<>c__DisplayClass53_0.<GetContext>b__0(IBuildContext ctx, Expression ex, Int32 l) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\SelectContext.cs:line 771
   at LinqToDB.Linq.Builder.SelectContext.ProcessScalar[T](Expression expression, Int32 level, Func`4 action, Func`1 defaultAction) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\SelectContext.cs:line 885
   at LinqToDB.Linq.Builder.SelectContext.GetContext(Expression expression, Int32 level, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\SelectContext.cs:line 768
   at LinqToDB.Linq.Builder.SelectManyBuilder.SelectManyContext.GetContext(Expression expression, Int32 level, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\SelectManyBuilder.cs:line 217
   at LinqToDB.Linq.Builder.TableBuilder.<>c__DisplayClass6_0.<BuildSequence>b__0(Int32 n, IBuildContext ctx) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\TableBuilder.cs:line 101
   at LinqToDB.Linq.Builder.TableBuilder.Find[T](ExpressionBuilder builder, BuildInfo buildInfo, Func`3 action) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\TableBuilder.cs:line 65
   at LinqToDB.Linq.Builder.TableBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\TableBuilder.cs:line 93
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\ExpressionBuilder.cs:line 177
   at LinqToDB.Linq.Builder.SelectManyBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\SelectManyBuilder.cs:line 35
   at LinqToDB.Linq.Builder.MethodCallBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\MethodCallBuilder.cs:line 22
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\ExpressionBuilder.cs:line 177
   at LinqToDB.Linq.Builder.WhereBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\WhereBuilder.cs:line 18
   at LinqToDB.Linq.Builder.MethodCallBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\MethodCallBuilder.cs:line 22
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\ExpressionBuilder.cs:line 177
   at LinqToDB.Linq.Builder.SelectBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\SelectBuilder.cs:line 35
   at LinqToDB.Linq.Builder.MethodCallBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\MethodCallBuilder.cs:line 22
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\ExpressionBuilder.cs:line 177
   at LinqToDB.Linq.Builder.FirstSingleBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\FirstSingleBuilder.cs:line 24
   at LinqToDB.Linq.Builder.MethodCallBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\MethodCallBuilder.cs:line 22
   at LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\ExpressionBuilder.cs:line 177
   at LinqToDB.Linq.Builder.ExpressionBuilder.Build[T]() in G:\_websrc\_dotnet\linq2db\Source\Linq\Builder\ExpressionBuilder.cs:line 148
   at LinqToDB.Linq.Query`1.GetQuery(IDataContextInfo dataContextInfo, Expression expr) in G:\_websrc\_dotnet\linq2db\Source\Linq\Query.cs:line 152

see PR #416 for test

fsharp linq has-tests bug

Most helpful comment

Don Syme provided a workaround for this issue here

>All comments

Don Syme provided a workaround for this issue here

Was this page helpful?
0 / 5 - 0 ratings

Related issues

bofagah400 picture bofagah400  路  4Comments

pebezo picture pebezo  路  4Comments

MajidSafari picture MajidSafari  路  4Comments

DmitriiGaidukov picture DmitriiGaidukov  路  4Comments

a-karpov-parc picture a-karpov-parc  路  4Comments