public ProjectionExpression UpdateSelect(ProjectionExpression projection, Expression selectExpression) { //get the lambda expression of the select method var lambda = (LambdaExpression)selectExpression.StripQuotes(); //if the lambda, is the identity lamda, simply return if (lambda.IsIdentityLambda()) return projection; //map the source argument of the lambda expression to the existing projection Map.Add(lambda.Parameters[0], projection.Projection); //get the new projection var newProjection = Visit(lambda.Body); //check if projection is actually changed if (newProjection == lambda.Body) return projection; //get used columns IEnumerable<SelectorExpression> columns = new ColumnFinder().FindColumns(newProjection); SelectStatementExpression select = projection.Select; var newSelect = new SelectStatementExpression(typeof(IEnumerable<>).MakeGenericType(newProjection.Type), new SelectClauseExpression(columns.ToArray(), select.SelectClause.Distinct), select.TableName, select.WhereClause, select.OrderBy, select.Limit, select.AllowFiltering); return new ProjectionExpression(newSelect, newProjection, projection.Aggregator, false, projection.Consistency, projection.PageSize); }
public TransactionController(ICommandsBus bus, TransactionReader transactionReader, ColumnFinder columnFinder, BankTransactionRuleFinder bankTransactionRuleFinder, IMapper mapper, Export export) { this.bus = bus; this.transactionReader = transactionReader; this.columnFinder = columnFinder; this.bankTransactionRuleFinder = bankTransactionRuleFinder; this.mapper = mapper; this.export = export; }