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(); }
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; } }
public void AppendAccessor(AccessorPredicateVisitor accessor) { if (this.parentAccessor == null) { this.parentAccessor = accessor; } else { if (this.parentAccessor is IAccessorAppendable accessorAppendablePredicate) { accessorAppendablePredicate.AppendAccessor(accessor); } } }
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(); }
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(); }