public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory)
        {
            MethodCallExpression methodCallExpression = expression as MethodCallExpression;

            if (expression == null)
            {
                return(null);
            }

            var innerExpression = methodCallExpression?.Arguments[1];

            if (innerExpression is LambdaExpression lambdaExpression)
            {
                var attributeExpression = lambdaExpression.Body;
                if (attributeExpression.NodeType == ExpressionType.And || attributeExpression.NodeType == ExpressionType.AndAlso)
                {
                    IPredicateVisitor        attributeValuePredicateVisitor = predicateVisitorFactory.Create(((BinaryExpression)attributeExpression).Right);
                    IPredicateVisitor        attributeName  = GetAttributeName(((BinaryExpression)attributeExpression).Left, predicateVisitorFactory);
                    AccessorPredicateVisitor parentAccessor = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]) as AccessorPredicateVisitor;
                    AccessorPredicateVisitor accessor       = new AccessorPredicateVisitor(attributeName, parentAccessor);
                    if (attributeValuePredicateVisitor is IAccessorAppendable accessorAppendablePredicate)
                    {
                        accessorAppendablePredicate.AppendAccessor(accessor);
                    }

                    return(attributeValuePredicateVisitor);
                }
            }

            throw new NotSupportedException();
        }
Beispiel #2
0
        public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory)
        {
            if (expression is MethodCallExpression methodCallExpression)
            {
                if (methodCallExpression.Object is MemberExpression memberExpression)
                {
                    AccessorPredicateVisitor parentAccessor           = predicateVisitorFactory.Create(memberExpression.Expression) as AccessorPredicateVisitor;
                    IPredicateVisitor        constantPredicateVisitor = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]);
                    return(new AccessorPredicateVisitor(RemoveQuotes(constantPredicateVisitor), parentAccessor));
                }
            }

            return(null);
        }
 public void AppendAccessor(AccessorPredicateVisitor accessor)
 {
     if (this.operand != null)
     {
         if (this.operand is IAccessorAppendable accessorAppendablePredicate)
         {
             accessorAppendablePredicate.AppendAccessor(accessor);
         }
     }
     else
     {
         this.operand = accessor;
     }
 }
Beispiel #4
0
 public void AppendAccessor(AccessorPredicateVisitor accessor)
 {
     if (this.parentAccessor == null)
     {
         this.parentAccessor = accessor;
     }
     else
     {
         if (this.parentAccessor is IAccessorAppendable accessorAppendablePredicate)
         {
             accessorAppendablePredicate.AppendAccessor(accessor);
         }
     }
 }
Beispiel #5
0
        public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory)
        {
            if (expression is MethodCallExpression methodCallExpression)
            {
                string currentName     = methodCallExpression.Method.Name;
                string currentAccessor = ParseMethodAccessorName(currentName);
                if (string.IsNullOrEmpty(currentAccessor))
                {
                    return(predicateVisitorFactory.Create(methodCallExpression.Arguments[0]));
                }

                AccessorPredicateVisitor parentAccessor           = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]) as AccessorPredicateVisitor;
                ConstantPredicateVisitor constantPredicateVisitor = new ConstantPredicateVisitor(currentAccessor);
                return(new AccessorPredicateVisitor(constantPredicateVisitor, parentAccessor));
            }

            throw new NotSupportedException();
        }
Beispiel #6
0
        public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory)
        {
            MethodCallExpression methodCallExpression = expression as MethodCallExpression;

            if (methodCallExpression == null)
            {
                return(null);
            }

            if (methodCallExpression.Arguments.Count >= 2)
            {
                IPredicateVisitor        inside = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]);
                IPredicateVisitor        parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]);
                AccessorPredicateVisitor stringPredicateVisitor = new AccessorPredicateVisitor(inside, parent);
                return(stringPredicateVisitor);
            }

            throw new NotSupportedException();
        }