Exemplo n.º 1
0
        private static Expression RemoveOrWithConstantBool(BinaryExpression node)
        {
            var constant = ExpressionParser.SingleOrDefault <ConstantExpression>(node.Left, node.Right);

            if (constant != null)
            {
                if (constant.Type == typeof(bool))
                {
                    var value = (bool)constant.Value;

                    var notConstant = constant == node.Left ? node.Right : node.Left;

                    if (value)
                    {
                        throw new Exception("cannot || with true");
                    }
                    else
                    {
                        return(notConstant);
                    }
                }
            }

            return(node);
        }
Exemplo n.º 2
0
        private static Expression RewriteEqualWithConstantBool(BinaryExpression node)
        {
            if (node.Left.NodeType == ExpressionType.Constant && node.Right.NodeType == ExpressionType.Constant)
            {
                return(node);
            }

            var constant = ExpressionParser.SingleOrDefault <ConstantExpression>(node.Left, node.Right);

            if (constant != null)
            {
                if (constant.Type == typeof(bool))
                {
                    var value = (bool)constant.Value;

                    var notConstant = constant == node.Left ? node.Right : node.Left;

                    if (value == false)
                    {
                        return(Expression.Not(notConstant));
                    }
                    else
                    {
                        return(notConstant);
                    }
                }
            }

            return(node);
        }
Exemplo n.º 3
0
        public static RangeDefinition Parse(BinaryExpression node)
        {
            var field = ExpressionParser.SingleOrDefault <MemberExpression>(node.Left, node.Right);
            var value = ExpressionParser.ParseNodes <object>(ExpressionType.Constant, ExpressionParser.ParseConstant <object>, node.Left, node.Right);

            var criteria = new RangeCriteria();

            if (object.ReferenceEquals(node.Left, field) == true)
            {
                switch (node.NodeType)
                {
                case ExpressionType.GreaterThan:
                    criteria.Greater = value;
                    break;

                case ExpressionType.GreaterThanOrEqual:
                    criteria.GreaterOrEqual = value;
                    break;

                case ExpressionType.LessThan:
                    criteria.Smaller = value;
                    break;

                case ExpressionType.LessThanOrEqual:
                    criteria.SmallerOrEqual = value;
                    break;

                default:
                    throw new Exception("invalid range operator");
                }
            }
            else
            {
                switch (node.NodeType)
                {
                case ExpressionType.GreaterThan:
                    criteria.Smaller = value;
                    break;

                case ExpressionType.GreaterThanOrEqual:
                    criteria.SmallerOrEqual = value;
                    break;

                case ExpressionType.LessThan:
                    criteria.Greater = value;
                    break;

                case ExpressionType.LessThanOrEqual:
                    criteria.GreaterOrEqual = value;
                    break;

                default:
                    throw new Exception("invalid range operator");
                }
            }

            return(new RangeDefinition
            {
                Field = ExpressionParser.ParseMember(field),
                Criteria = criteria,
            });
        }