public static Expression Replace(Expression source, AliasGenerator aliasGenerator) { var aliasMap = DeclaredAliasGatherer.GatherDeclared(source).Reverse().ToDictionary(a => a, aliasGenerator.CloneAlias); AliasReplacer ap = new AliasReplacer(aliasMap); return(ap.Visit(source)); }
protected internal override Expression VisitProjection(ProjectionExpression proj) { if (proj != root) { return(AliasReplacer.Replace(base.VisitProjection(proj), aliasGenerator)); } else { return((ProjectionExpression)base.VisitProjection(proj)); } }