14
14
*/
15
15
16
16
using System . Linq . Expressions ;
17
- using MongoDB . Bson . Serialization ;
18
17
using MongoDB . Driver . Linq . Linq3Implementation . Ast ;
19
18
using MongoDB . Driver . Linq . Linq3Implementation . Ast . Expressions ;
20
19
using MongoDB . Driver . Linq . Linq3Implementation . Ast . Stages ;
@@ -41,16 +40,15 @@ public static AstPipeline Translate(TranslationContext context, MethodCallExpres
41
40
ClientSideProjectionHelper . ThrowIfClientSideProjection ( expression , pipeline , method ) ;
42
41
43
42
AstExpression outerAst ;
44
- var rootVar = AstExpression . Var ( "ROOT" , isCurrent : true ) ;
45
43
var outerSerializer = pipeline . OutputSerializer ;
46
44
if ( outerSerializer is IWrappedValueSerializer wrappedSerializer )
47
45
{
48
- outerAst = AstExpression . GetField ( rootVar , wrappedSerializer . FieldName ) ;
46
+ outerAst = AstExpression . GetField ( AstExpression . RootVar , wrappedSerializer . FieldName ) ;
49
47
outerSerializer = wrappedSerializer . ValueSerializer ;
50
48
}
51
49
else
52
50
{
53
- outerAst = rootVar ;
51
+ outerAst = AstExpression . RootVar ;
54
52
}
55
53
56
54
var wrapOuterStage = AstStage . Project (
@@ -74,20 +72,19 @@ public static AstPipeline Translate(TranslationContext context, MethodCallExpres
74
72
@as : "_inner" ) ;
75
73
76
74
var resultSelectorLambda = ExpressionHelper . UnquoteLambda ( arguments [ 4 ] ) ;
77
- var root = AstExpression . Var ( "ROOT" , isCurrent : true ) ;
78
75
var outerParameter = resultSelectorLambda . Parameters [ 0 ] ;
79
- var outerField = AstExpression . GetField ( root , "_outer" ) ;
76
+ var outerField = AstExpression . GetField ( AstExpression . RootVar , "_outer" ) ;
80
77
var outerSymbol = context . CreateSymbol ( outerParameter , outerField , outerSerializer ) ;
81
78
var innerParameter = resultSelectorLambda . Parameters [ 1 ] ;
82
- var innerField = AstExpression . GetField ( root , "_inner" ) ;
79
+ var innerField = AstExpression . GetField ( AstExpression . RootVar , "_inner" ) ;
83
80
var ienumerableInnerSerializer = IEnumerableSerializer . Create ( innerSerializer ) ;
84
81
var innerSymbol = context . CreateSymbol ( innerParameter , innerField , ienumerableInnerSerializer ) ;
85
82
var resultSelectorContext = context . WithSymbols ( outerSymbol , innerSymbol ) ;
86
83
var resultSelectorTranslation = ExpressionToAggregationExpressionTranslator . Translate ( resultSelectorContext , resultSelectorLambda . Body ) ;
87
- var ( projectStage , newOutputSerializer ) = ProjectionHelper . CreateProjectStage ( resultSelectorTranslation ) ;
84
+ var ( projectStage , projectSerializer ) = ProjectionHelper . CreateProjectStage ( resultSelectorTranslation ) ;
88
85
89
86
pipeline = pipeline . AddStages (
90
- newOutputSerializer ,
87
+ projectSerializer ,
91
88
wrapOuterStage ,
92
89
lookupStage ,
93
90
projectStage ) ;
0 commit comments