/// <summary> /// Execute an aggregation query. /// </summary> /// <typeparam name="K"></typeparam> /// <param name="keySelector">A Lambda expression which represents an accessor property of the field which shoule be aggregated.</param> /// <param name="aggregateType">One of the <see cref="AggregateType">AggregateType</see> enum members.</param> /// <returns>A single value, which represents the aggregate</returns> /// <remarks>Before using this function, make shure, that your database product supports the aggregate function, as defined in aggregateType. /// Polymorphy: StDev and Var only return the aggregate for the given class. All others return the aggregate for all subclasses. /// Transactions: Please note, that the aggregate functions always work against the database. /// Unsaved changes in your objects are not recognized.</remarks> public object ExecuteAggregate <K>(LE.Expression <Func <T, K> > keySelector, AggregateType aggregateType) { ExpressionTreeTransformer transformer = new ExpressionTreeTransformer(keySelector); string field = transformer.Transform(); return(ExecuteAggregate(field, aggregateType)); }
internal Expression ToExpression(string expressionText, CompiledScope scope) { var tokens = Lexer.Tokenize(expressionText).ToArray(); var astNode = Parser.Parse(tokens); var transformer = new ExpressionTreeTransformer(LanguageDefinition, scope); return(astNode.Transform(transformer)); }
private void TryPropagate(Expression dominatedExpression, Expression original, Expression replacement) { ExpressionTreeTransformer ett = new ExpressionTreeTransformer(original, replacement); ett.Visit(dominatedExpression); }