protected override Expression VisitSubquery(SubqueryExpression subquery)
 {
     var saveOrderings = _gatheredOrderings;
     _gatheredOrderings = null;
     var result = base.VisitSubquery(subquery);
     _gatheredOrderings = saveOrderings;
     return result;
 }
 protected virtual Expression VisitSubquery(SubqueryExpression subquery)
 {
     switch ((MongoExpressionType)subquery.NodeType)
     {
     case MongoExpressionType.Scalar:
         return(VisitScalar((ScalarExpression)subquery));
     }
     return(subquery);
 }
 protected virtual bool CompareSubquery(SubqueryExpression a, SubqueryExpression b)
 {
     if (a.NodeType != b.NodeType)
     {
         return(false);
     }
     switch ((MongoExpressionType)a.NodeType)
     {
     case MongoExpressionType.Scalar:
         return(CompareScalar((ScalarExpression)a, (ScalarExpression)b));
     }
     return(false);
 }
 protected override Expression VisitSubquery(SubqueryExpression subquery)
 {
     return subquery;
 }
 protected virtual Expression VisitSubquery(SubqueryExpression subquery)
 {
     switch ((MongoExpressionType)subquery.NodeType)
     {
         case MongoExpressionType.Scalar:
             return VisitScalar((ScalarExpression)subquery);
     }
     return subquery;
 }
 protected virtual bool CompareSubquery(SubqueryExpression a, SubqueryExpression b)
 {
     if (a.NodeType != b.NodeType)
         return false;
     switch ((MongoExpressionType)a.NodeType)
     {
         case MongoExpressionType.Scalar:
             return CompareScalar((ScalarExpression)a, (ScalarExpression)b);
     }
     return false;
 }