protected AggregateSubqueryExpression UpdateAggregateSubquery(AggregateSubqueryExpression aggregate, ScalarExpression subquery) { if (subquery != aggregate.AggregateAsSubquery) { return new AggregateSubqueryExpression(aggregate.GroupByAlias, aggregate.AggregateInGroupSelect, subquery); } return aggregate; }
protected override Expression VisitAggregateSubquery(AggregateSubqueryExpression aggregate) { Expression mapped; if (this.map.TryGetValue(aggregate, out mapped)) { return mapped; } return this.Visit(aggregate.AggregateAsSubquery); }
protected virtual Expression VisitAggregateSubquery(AggregateSubqueryExpression aggregate) { var subquery = (ScalarExpression)this.Visit(aggregate.AggregateAsSubquery); return this.UpdateAggregateSubquery(aggregate, subquery); }
protected virtual bool CompareAggregateSubquery(AggregateSubqueryExpression a, AggregateSubqueryExpression b) { return this.Compare(a.AggregateAsSubquery, b.AggregateAsSubquery) && this.Compare(a.AggregateInGroupSelect, b.AggregateInGroupSelect) && a.GroupByAlias == b.GroupByAlias; }
protected override Expression VisitAggregateSubquery(AggregateSubqueryExpression aggregate) { this.aggregates.Add(aggregate); return base.VisitAggregateSubquery(aggregate); }