/// <summary> /// Initializes a new instance of the <see cref="AggregateSubqueryExpression"/> class. /// </summary> /// <param name="groupByAlias">The group by alias.</param> /// <param name="aggregateInGroupSelect">The aggregate in group select.</param> /// <param name="aggregateAsSubquery">The aggregate as subquery.</param> public AggregateSubqueryExpression(TableAlias groupByAlias, Expression aggregateInGroupSelect, ScalarExpression aggregateAsSubquery) : base(DbExpressionType.AggregateSubquery, aggregateAsSubquery.Type) { this.AggregateInGroupSelect = aggregateInGroupSelect; this.GroupByAlias = groupByAlias; this.AggregateAsSubquery = aggregateAsSubquery; }
/// <summary> /// Updates the scalar. /// </summary> /// <param name="scalar">The scalar.</param> /// <param name="select">The select.</param> /// <returns></returns> protected ScalarExpression UpdateScalar(ScalarExpression scalar, SelectExpression select) { if (select != scalar.Select) { return(new ScalarExpression(scalar.Type, select)); } return(scalar); }
/// <summary> /// Compares the scalar. /// </summary> /// <param name="a">A.</param> /// <param name="b">The b.</param> /// <returns></returns> protected virtual bool CompareScalar(ScalarExpression a, ScalarExpression b) { return(this.Compare(a.Select, b.Select)); }
/// <summary> /// Updates the aggregate subquery. /// </summary> /// <param name="aggregate">The aggregate.</param> /// <param name="subquery">The subquery.</param> /// <returns></returns> protected AggregateSubqueryExpression UpdateAggregateSubquery(AggregateSubqueryExpression aggregate, ScalarExpression subquery) { if (subquery != aggregate.AggregateAsSubquery) { return(new AggregateSubqueryExpression(aggregate.GroupByAlias, aggregate.AggregateInGroupSelect, subquery)); } return(aggregate); }
/// <summary> /// Visits the scalar. /// </summary> /// <param name="scalar">The scalar.</param> /// <returns></returns> protected virtual Expression VisitScalar(ScalarExpression scalar) { var select = (SelectExpression)this.Visit(scalar.Select); return(this.UpdateScalar(scalar, select)); }