public override void VisitQueryJoinExpression <TExpression>(
     IQueryJoinExpression <TExpression> queryJoinExpression)
 {
     Steps.Add(new WriteJoinKeyword());
     Steps.Add(new WriteWhitespace());
     Steps.Add(new WriteName(queryJoinExpression.JoinVariable));
     Steps.Add(new WriteWhitespace());
     Steps.Add(new WriteInKeyword());
     Steps.Add(new WriteWhitespace());
     Steps.Add(new WriteExpression <TExpression>(queryJoinExpression.InExpression));
     Steps.Add(new WriteWhitespace());
     Steps.Add(new WriteOnKeyword());
     Steps.Add(new WriteWhitespace());
     Steps.Add(new WriteExpression <TExpression>(queryJoinExpression.OnExpression));
     Steps.Add(new WriteWhitespace());
     Steps.Add(new WriteEqualsKeyword());
     Steps.Add(new WriteWhitespace());
     Steps.Add(new WriteExpression <TExpression>(queryJoinExpression.EqualsExpression));
     if (queryJoinExpression.IntoVariable != null)
     {
         Steps.Add(new WriteWhitespace());
         Steps.Add(new WriteIntoKeyword());
         Steps.Add(new WriteWhitespace());
         Steps.Add(new WriteName(queryJoinExpression.IntoVariable));
     }
 }
 public static void VisitQueryJoinExpressionChildren<TExpression>(
     IQueryJoinExpression<TExpression> queryJoinExpression,
     IGenericExpressionVisitor visitor)
     where TExpression : IExpression
 {
     VisitIfNotNull(queryJoinExpression.InExpression, visitor);
     VisitIfNotNull(queryJoinExpression.OnExpression, visitor);
     VisitIfNotNull(queryJoinExpression.EqualsExpression, visitor);
 }
 public virtual void VisitQueryJoinExpression <TExpression>(
     IQueryJoinExpression <TExpression> queryJoinExpression)
     where TExpression : IExpression
 {
     Visit(queryJoinExpression);
 }