Exemplo n.º 1
0
        public override Expression BuildExpression(Locator locator, Expression parent, int level)
        {
            var        innerLocator = (MemberLocator)locator;
            Expression result       = Expression.Property(parent, innerLocator.Property);

            if (innerLocator.AsString)
            {
                result = Expression.Call(result, innerLocator.GetType().GetMethod("ToString"));
            }

            if (locator.Left == null)
            {
                return(result);
            }

            result = _factory.BuildLocatorExpression(locator.Left, result, level);
            if (locator.Right == null)
            {
                return(result);
            }

            var right          = _factory.BuildLocatorExpression(locator.Right, result, level);
            var binaryOperator = ExpressionTypeHelper.GetByLocator(innerLocator.Operation);

            return(Expression.MakeBinary(binaryOperator, result, right));
        }
Exemplo n.º 2
0
        public override Expression BuildExpression(Locator locator, Expression parent, int level)
        {
            var resultLeft = locator.Left == null
                                ? Expression.Constant("")
                                : _factory.BuildLocatorExpression(locator.Left, parent, level);

            var resultRight = locator.Right == null
                                ? Expression.Constant("")
                                : _factory.BuildLocatorExpression(locator.Right, parent, level);

            return(Expression.Call(_method, resultLeft, resultRight));
        }
Exemplo n.º 3
0
        /// <exception cref="OverflowException"><paramref name="locator.Conditions" /> Enum Names should be equivalent</exception>
        public override Expression BuildExpression(Locator locator, Expression parent, int level)
        {
            var result = parent; //ExpressionHelper.MakeAsEnumerableExpression(parent);

            if (locator.Conditions != null && locator.Conditions.Any())
            {
                var        type       = result.Type.GenericTypeArguments.First();
                var        parameter  = Expression.Parameter(type, $"{type.Name.ToLower()}{level}");
                var        lambdaBody = _factory.BuildExpressionForConditions(locator.Conditions, parameter, level);
                Expression lambda     = Expression.Lambda(lambdaBody, parameter);
                result = MakeAnyExpression(lambda, result);
                return(result);
            }
            if (locator.Conditions != null && locator.Left != null && !locator.Conditions.Any())
            {
                var type       = result.Type.GenericTypeArguments.First();
                var parameter  = Expression.Parameter(type, $"{type.Name.ToLower()}{level}");
                var lambdaBody = _factory.BuildLocatorExpression(locator.Left, parameter, level);
                if (locator.Left.Type == LocatorType.Constant)
                {
                    lambdaBody = Expression.Equal(parameter, lambdaBody);
                }
                Expression lambda = Expression.Lambda(lambdaBody, parameter);
                result = MakeAnyExpression(lambda, result);
                return(result);
            }
            result = MakeAnyExpression(result);
            return(result);
        }
Exemplo n.º 4
0
        public override Expression BuildExpression(Locator locator, Expression parent, int level)
        {
            var        innerLocator = (ConstantLocator)locator;
            Expression result       = Expression.Constant(innerLocator.Value);

            if (innerLocator.TryCast)
            {
                result = Expression.Convert(result, parent.Type);
            }

            return(locator.Left == null ? result : _factory.BuildLocatorExpression(locator.Left, result, level));
        }