protected virtual bool CompareJoin(JoinExpression a, JoinExpression b)
 {
     if (!((a.Join == b.Join) && this.Compare(a.Left, b.Left)))
     {
         return(false);
     }
     if ((a.Join == JoinType.CrossApply) || (a.Join == JoinType.OuterApply))
     {
         ScopedDictionary <TableAlias, TableAlias> aliasScope = this.aliasScope;
         try
         {
             this.aliasScope = new ScopedDictionary <TableAlias, TableAlias>(this.aliasScope);
             this.MapAliases(a.Left, b.Left);
             return(this.Compare(a.Right, b.Right) && this.Compare(a.Condition, b.Condition));
         }
         finally
         {
             this.aliasScope = aliasScope;
         }
     }
     return(this.Compare(a.Right, b.Right) && this.Compare(a.Condition, b.Condition));
 }
Example #2
0
        protected override Expression VisitJoin(JoinExpression join)
        {
            Expression expression;
            Expression expression4;

            if (join.Join == JoinType.SingletonLeftOuter)
            {
                AliasedExpression expression2 = this.Visit(join.Right) as AliasedExpression;
                if (!((expression2 == null) || this.allColumnsUsed.ContainsKey(expression2.Alias)))
                {
                    return(this.Visit(join.Left));
                }
                Expression expression3 = this.Visit(join.Condition);
                expression4 = this.Visit(join.Left);
                expression  = this.Visit(join.Right);
                return(base.UpdateJoin(join, join.Join, expression4, expression, expression3));
            }
            Expression condition = this.Visit(join.Condition);

            expression  = this.VisitSource(join.Right);
            expression4 = this.VisitSource(join.Left);
            return(base.UpdateJoin(join, join.Join, expression4, expression, condition));
        }
        protected override Expression VisitJoin(JoinExpression join)
        {
            this.VisitJoinLeft(join.Left);
            this.WriteLine(Indentation.Same);
            switch (join.Join)
            {
            case JoinType.CrossJoin:
                this.Write("CROSS JOIN ");
                break;

            case JoinType.InnerJoin:
                this.Write("INNER JOIN ");
                break;

            case JoinType.CrossApply:
                this.Write("CROSS APPLY ");
                break;

            case JoinType.OuterApply:
                this.Write("OUTER APPLY ");
                break;

            case JoinType.LeftOuter:
            case JoinType.SingletonLeftOuter:
                this.Write("LEFT OUTER JOIN ");
                break;
            }
            this.VisitJoinRight(join.Right);
            if (join.Condition != null)
            {
                this.WriteLine(Indentation.Inner);
                this.Write("ON ");
                this.VisitPredicate(join.Condition);
                this.Indent(Indentation.Outer);
            }
            return(join);
        }
        private bool IsCrossJoin(Expression expression)
        {
            JoinExpression expression2 = expression as JoinExpression;

            return((expression2 != null) && (expression2.Join == JoinType.CrossJoin));
        }