protected virtual Expression VisitSubquery(SubqueryExpression subquery) { switch ((DbExpressionType)subquery.NodeType) { case DbExpressionType.Scalar: return this.VisitScalar((ScalarExpression)subquery); case DbExpressionType.Exists: return this.VisitExists((ExistsExpression)subquery); case DbExpressionType.In: return this.VisitIn((InExpression)subquery); } return subquery; }
protected override Expression VisitSubquery(SubqueryExpression subquery) { // don't gather inside scalar & exists return subquery; }
protected override Expression VisitSubquery(SubqueryExpression subquery) { // don't count aggregates in subqueries return subquery; }
protected override Expression VisitSubquery(SubqueryExpression subquery) { return subquery; }
protected virtual bool CompareSubquery(SubqueryExpression a, SubqueryExpression b) { if (a.NodeType != b.NodeType) return false; switch ((DbExpressionType)a.NodeType) { case DbExpressionType.Scalar: return this.CompareScalar((ScalarExpression)a, (ScalarExpression)b); case DbExpressionType.Exists: return this.CompareExists((ExistsExpression)a, (ExistsExpression)b); case DbExpressionType.In: return this.CompareIn((InExpression)a, (InExpression)b); } return false; }
protected override Expression VisitSubquery(SubqueryExpression subquery) { if ((subquery.NodeType == (ExpressionType)DbExpressionType.Scalar || subquery.NodeType == (ExpressionType)DbExpressionType.In) && subquery.Select != null) { System.Diagnostics.Debug.Assert(subquery.Select.Fields.Count == 1); MarkFieldAsUsed(subquery.Select.Alias, subquery.Select.Fields[0].Name); } return base.VisitSubquery(subquery); }