public static Expression GetPredicateExpression (ParameterExpression instanceParameter, string sourceExpression, ExpressionOperator @operator, object value, PredicateBuilderConfiguration configuration = null) { var left = MemberExpressionBuilder.GetExpressionSelector(instanceParameter, sourceExpression).Body; return(GetPredicateExpression(left, @operator, value, configuration)); }
private Expression GetExpression(IProjectionSource source, ParameterExpression itParameter) { switch (source) { case StringProjectionSource stringProjectionSource: return(MemberExpressionBuilder.GetExpression(itParameter, stringProjectionSource.SourceExpression)); case ExpressionProjectionSource expressionProjectionSource: return(Expressions.ExpressionParameterReplacer.Replace(expressionProjectionSource.SourceExpression, itParameter.Type, itParameter)); case LambdaExpressionProjectionSource lambdaExpressionProjectionSource: return(Expressions.ExpressionParameterReplacer.Replace(lambdaExpressionProjectionSource.SourceExpression, lambdaExpressionProjectionSource.SourceExpression.Parameters.First(), itParameter)); case ConstantProjectionSource constantProjectionSource: return(Expression.Constant(constantProjectionSource.Value)); } throw new InvalidOperationException("Unexpected projection source type"); }
private void GenerateOperationalAccessors(ModuleBuilder target, string targetName, IEnumerable <PapVariable> variables) { // Generiert Properties, die Eingabe- oder Ausgabeparameter in die Berechnungsklasse // weiterleiten. foreach (var variable in variables) { var memberExpr = new MemberExpressionBuilder(targetName, variable.Name); var getter = new ReturnStatementBuilder(memberExpr); var setter = new AssignmentStatementBuilder(memberExpr, new KeywordExpressionBuilder(KeywordExpressionBuilder.Keywords.Value)); target.Properties.Add(new FullPropertyBuilder(Visibilities.Private, TypeMapping.Map(variable.Type), variable.Name, getter, setter)); } }
private InvocationExpressionBuilder MakeRoundingExpression(ExpressionBuilder inner, ConstantExpressionBuilder decimals, MemberExpressionBuilder direction) { if (direction != null) { string roundingFunction; if (direction.IsEquivalent("BigDecimal.ROUND_UP")) { roundingFunction = "Ceiling"; } else if (direction.IsEquivalent("BigDecimal.ROUND_DOWN")) { roundingFunction = "Floor"; } else { throw new NotSupportedException(); } var invocation = new InvocationExpressionBuilder(roundingFunction); invocation.Arguments.Add(inner); invocation.Arguments.Add(decimals); return(invocation); } else { var invocation = new InvocationExpressionBuilder("System.Math.Round"); invocation.Arguments.Add(inner); invocation.Arguments.Add(decimals); invocation.Arguments.Add(new MemberExpressionBuilder("System", "MidpointRounding", "AwayFromZero")); return(invocation); } }