예제 #1
0
 public static TermDefinition <T> Parse <T>(Expression left, Expression right)
 {
     return(new TermDefinition <T>
     {
         Name = ExpressionParser.ParseNodes(ExpressionType.MemberAccess, ExpressionParser.ParseMember, left, right),
         Value = ExpressionParser.ParseNodes(ExpressionType.Constant, ExpressionParser.ParseConstant <T>, left, right),
     });
 }
예제 #2
0
 public static TermsDefinition Parse(Expression left, Expression right, string execution = null)
 {
     return(new TermsDefinition
     {
         Name = ExpressionParser.ParseNodes(ExpressionType.MemberAccess, ExpressionParser.ParseMember, left, right),
         Value = ExpressionParser.ParseNodes(ExpressionType.Constant, ExpressionParser.ParseConstant <object>, left, right),
         Execution = execution,
     });
 }
예제 #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,
            });
        }