protected override Expression VisitSubQueryExpression (SubQueryExpression expression) { ArgumentUtility.CheckNotNull ("expression", expression); var clonedQueryModel = expression.QueryModel.Clone (QuerySourceMapping); return new SubQueryExpression (clonedQueryModel); }
protected override Expression VisitSubQueryExpression (SubQueryExpression expression) { ArgumentUtility.CheckNotNull ("expression", expression); expression.QueryModel.TransformExpressions (ex => ReplaceClauseReferences (ex, _querySourceMapping, _throwOnUnmappedReferences)); return expression; }
protected override Expression VisitSubQueryExpression (SubQueryExpression expression) { ArgumentUtility.CheckNotNull ("expression", expression); return Expression.Parameter (expression.Type, "{" + expression.QueryModel + "}"); }
protected virtual void FlattenSubQuery ( SubQueryExpression subQueryExpression, FromClauseBase fromClause, QueryModel queryModel, int destinationIndex) { ArgumentUtility.CheckNotNull ("subQueryExpression", subQueryExpression); ArgumentUtility.CheckNotNull ("fromClause", fromClause); ArgumentUtility.CheckNotNull ("queryModel", queryModel); CheckFlattenable (subQueryExpression.QueryModel); var innerMainFromClause = subQueryExpression.QueryModel.MainFromClause; CopyFromClauseData (innerMainFromClause, fromClause); var innerSelectorMapping = new QuerySourceMapping(); innerSelectorMapping.AddMapping (fromClause, subQueryExpression.QueryModel.SelectClause.Selector); queryModel.TransformExpressions (ex => ReferenceReplacingExpressionTreeVisitor.ReplaceClauseReferences (ex, innerSelectorMapping, false)); InsertBodyClauses (subQueryExpression.QueryModel.BodyClauses, queryModel, destinationIndex); var innerBodyClauseMapping = new QuerySourceMapping(); innerBodyClauseMapping.AddMapping (innerMainFromClause, new QuerySourceReferenceExpression (fromClause)); queryModel.TransformExpressions (ex => ReferenceReplacingExpressionTreeVisitor.ReplaceClauseReferences (ex, innerBodyClauseMapping, false)); }
protected override Expression VisitSubQueryExpression (SubQueryExpression expression) { expression.QueryModel.TransformExpressions (VisitExpression); return expression; // Note that we modifiy the (mutable) QueryModel, we return an unchanged expression }