public static ProjectedColumns ProjectColumns(QueryLanguage language, ProjectionAffinity affinity, Expression expression, IEnumerable <ColumnDeclaration> existingColumns, TableAlias newAlias, IEnumerable <TableAlias> existingAliases) { ColumnProjector projector = new ColumnProjector(language, affinity, expression, existingColumns, newAlias, existingAliases); Expression expr = projector.Visit(expression); return(new ProjectedColumns(expr, projector.columns.AsReadOnly())); }
private Nominator(QueryLanguage language, ProjectionAffinity affinity) { this.language = language; this.affinity = affinity; this.candidates = new HashSet <Expression>(); this.isBlocked = false; }
internal static HashSet <Expression> Nominate(QueryLanguage language, ProjectionAffinity affinity, Expression expression) { Nominator nominator = new Nominator(language, affinity); nominator.Visit(expression); return(nominator.candidates); }
private ColumnProjector(QueryLanguage language, ProjectionAffinity affinity, Expression expression, IEnumerable <ColumnDeclaration> existingColumns, TableAlias newAlias, IEnumerable <TableAlias> existingAliases) { this.language = language; this.newAlias = newAlias; this.existingAliases = new HashSet <TableAlias>(existingAliases); this.map = new Dictionary <ColumnExpression, ColumnExpression>(); if (existingColumns != null) { this.columns = new List <ColumnDeclaration>(existingColumns); this.columnNames = new HashSet <string>(existingColumns.Select(c => c.Name)); } else { this.columns = new List <ColumnDeclaration>(); this.columnNames = new HashSet <string>(); } this.candidates = Nominator.Nominate(language, affinity, expression); }
public static ProjectedColumns ProjectColumns(QueryLanguage language, ProjectionAffinity affinity, Expression expression, IEnumerable <ColumnDeclaration> existingColumns, TableAlias newAlias, params TableAlias[] existingAliases) { return(ProjectColumns(language, affinity, expression, existingColumns, newAlias, (IEnumerable <TableAlias>)existingAliases)); }