/// <summary> /// /// </summary> /// <param name="outer"></param> /// <returns></returns> protected virtual Expression VisitOuterJoined(OuterJoinedExpression outer) { Expression test = this.Visit(outer.Test); Expression expression = this.Visit(outer.Expression); if (test != outer.Test || expression != outer.Expression) { return(new OuterJoinedExpression(test, expression)); } return(outer); }
/// <summary> /// /// </summary> /// <param name="proj"></param> /// <returns></returns> public static ProjectionExpression AddOuterJoinTest(this ProjectionExpression proj) { string colName = proj.Source.GetAvailableColumnName("Test"); SelectExpression newSource = proj.Source.AddColumn(new ColumnDeclaration(colName, Expression.Constant(1, typeof(int?)))); Expression newProjector = new OuterJoinedExpression( new ColumnExpression(typeof(int?), newSource.Alias, colName), proj.Projector ); return(new ProjectionExpression(newSource, newProjector, proj.Aggregator)); }
/// <summary> /// /// </summary> /// <param name="outer"></param> /// <returns></returns> protected virtual Expression VisitOuterJoined(OuterJoinedExpression outer) { this.Write("Outer("); this.WriteLine(Indentation.Inner); this.Visit(outer.Test); this.Write(", "); this.WriteLine(Indentation.Same); this.Visit(outer.Expression); this.WriteLine(Indentation.Outer); this.Write(")"); return(outer); }