Пример #1
0
        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));
        }
Пример #2
0
        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");
        }
Пример #3
0
        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));
            }
        }
Пример #4
0
        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);
            }
        }