public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } string methodName = FilterMapping.AllowedGroupMethods[methodCallExpression.Method.Name]; ConstantPredicateVisitor method = new ConstantPredicateVisitor(methodName); IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); List <IPredicateVisitor> parameters = new List <IPredicateVisitor>(); if (methodCallExpression.Arguments[1].NodeType != ExpressionType.NewArrayInit) { return(null); } foreach (Expression part in ((NewArrayExpression)methodCallExpression.Arguments[1]).Expressions) { parameters.Add(predicateVisitorFactory.Create(part)); } CollectionPredicateVisitor collection = new CollectionPredicateVisitor(parameters); EqualPredicateVisitor equal = new EqualPredicateVisitor(method, collection); Visitors.AccessorPredicateVisitor accessor = new Visitors.AccessorPredicateVisitor(equal, parent); return(accessor); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); List <IPredicateVisitor> parameters = new List <IPredicateVisitor>(); if (methodCallExpression.Arguments[1].NodeType != ExpressionType.NewArrayInit) { return(null); } foreach (Expression part in ((NewArrayExpression)methodCallExpression.Arguments[1]).Expressions) { parameters.Add(predicateVisitorFactory.Create(part)); } CollectionPredicateVisitor collection = new CollectionPredicateVisitor(parameters); EqualPredicateVisitor equal = new EqualPredicateVisitor(parent, collection); return(equal); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } string methodName = Mapping.AllowedMethods[methodCallExpression.Method.Name]; var memberExpression = methodCallExpression.Arguments[0] as MemberExpression; string currentName = memberExpression.Member.Name; var callerParent = predicateVisitorFactory.Create(memberExpression.Expression); ConstantPredicateVisitor constant = new ConstantPredicateVisitor(currentName); // c.Key.In("c14", "c15") if (methodCallExpression.Arguments.Count > 1) { IPredicateVisitor methodArguments = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); var inner = new BinaryPredicateVisitor(constant, methodName, methodArguments); return(CombinePredicates(callerParent, inner)); } // c.Key.IsDefined() var binaryPredicateVisitor = new BinaryPredicateVisitor(constant, methodName, new ConstantPredicateVisitor(string.Empty)); return(CombinePredicates(callerParent, binaryPredicateVisitor)); }
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) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } if (methodCallExpression.Arguments.Count == 1) { string operatorName = Mapping.AllowedMethods[methodCallExpression.Method.Name]; IPredicateVisitor cartPredicateVisitor = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); return(new UnaryPredicateVisitor(cartPredicateVisitor, operatorName)); } if (methodCallExpression.Arguments.Count == 2) { string operatorName = Mapping.AllowedMethods[methodCallExpression.Method.Name]; IPredicateVisitor cartPredicateVisitor = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); IEnumerable <IPredicateVisitor> arguments = GetArguments(methodCallExpression.Arguments[1], predicateVisitorFactory); if (arguments.ToList().Count > 1 || methodCallExpression.Method.Name == "IsNotIn") { CollectionPredicateVisitor collectionPredicateVisitor = new CollectionPredicateVisitor(arguments); return(new ComparisonPredicateVisitor(cartPredicateVisitor, operatorName, collectionPredicateVisitor)); } else { return(new ComparisonPredicateVisitor(cartPredicateVisitor, operatorName, arguments.First())); } } return(null); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { BinaryExpression binaryExpression = expression as BinaryExpression; if (binaryExpression == null) { return(null); } IPredicateVisitor left = predicateVisitorFactory.Create(binaryExpression.Left); IPredicateVisitor right = predicateVisitorFactory.Create(binaryExpression.Right); // variants.price.centAmount:range (1 to 30), (40 to 100) if (CanCombinePredicateVisitors(left, right)) { return(CombinePredicateVisitors(left, right)); } CollectionPredicateVisitor collectionPredicate = new CollectionPredicateVisitor(new List <IPredicateVisitor>() { left, right }); return(collectionPredicate); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor current = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); return(new Visitors.AccessorPredicateVisitor(current, parent)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { if (expression is MethodCallExpression methodCallExpression) { if (methodCallExpression.Object != null) { return(predicateVisitorFactory.Create(methodCallExpression.Object)); } return(predicateVisitorFactory.Create(methodCallExpression.Arguments[0])); } return(null); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { BinaryExpression binaryExpression = expression as BinaryExpression; if (binaryExpression == null) { return(null); } IPredicateVisitor left = predicateVisitorFactory.Create(binaryExpression.Left); IPredicateVisitor right = predicateVisitorFactory.Create(binaryExpression.Right); return(new EqualPredicateVisitor(left, right)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor inner = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); IPredicateVisitor attribute = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); return(new ContainerPredicateVisitor(inner, attribute)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { if (expression is MethodCallExpression methodCallExpression) { if (methodCallExpression.Object is MemberExpression memberExpression) { ContainerPredicateVisitor parentAccessor = predicateVisitorFactory.Create(memberExpression) as ContainerPredicateVisitor; IPredicateVisitor constantPredicateVisitor = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); return(new ContainerPredicateVisitor(RemoveQuotes(constantPredicateVisitor), parentAccessor)); } } return(null); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor inner = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); IPredicateVisitor innerWithoutQuotes = RemoveQuotes(inner); IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Object); return(new Visitors.AccessorPredicateVisitor(innerWithoutQuotes, parent)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { BinaryExpression binaryExpression = expression as BinaryExpression; if (binaryExpression == null) { return(null); } IPredicateVisitor predicateVisitorLeft = predicateVisitorFactory.Create(binaryExpression.Left); IPredicateVisitor predicateVisitorRight = predicateVisitorFactory.Create(binaryExpression.Right); string operatorSign = Mapping.GetOperator(expression.NodeType, Mapping.LogicalOperators); return(new BinaryLogicalPredicateVisitor(predicateVisitorLeft, operatorSign, predicateVisitorRight)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor id = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); SubtreePredicateVisitor method = new SubtreePredicateVisitor(id); IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); return(new EqualPredicateVisitor(parent, method)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { List <IPredicateVisitor> predicateVisitors = new List <IPredicateVisitor>(); NewArrayExpression arrayExpression = expression as NewArrayExpression; if (arrayExpression != null) { foreach (var innerExpression in arrayExpression.Expressions) { IPredicateVisitor innerPredicateVisitor = predicateVisitorFactory.Create(innerExpression); predicateVisitors.Add(innerPredicateVisitor); } } else if (IsArrayOrList(expression)) { var dynamicInvoke = Expression.Lambda(expression, null).Compile().DynamicInvoke(null); if (dynamicInvoke is IEnumerable array) { foreach (var item in array) { var constantOrEnum = IsStringOrEnum(item, out string sItem); var constant = constantOrEnum ? sItem : item.ToString(); predicateVisitors.Add(new ConstantPredicateVisitor(constant)); } } } return(new CollectionPredicateVisitor(predicateVisitors)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } if (methodCallExpression.Arguments[0] == null) { throw new NotSupportedException(); } IPredicateVisitor innerPredicateVisitor = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); var methodName = methodCallExpression.Method.Name; var dynamicInvoke = Expression.Lambda(methodCallExpression.Arguments[0], null).Compile().DynamicInvoke(null); if (dynamicInvoke is DateTime dateTime) { return(methodName == "AsDate" ? new ConstantPredicateVisitor(dateTime.ToUtcIso8601(true).WrapInQuotes()) : new ConstantPredicateVisitor(dateTime.ToUtcIso8601().WrapInQuotes())); } if (dynamicInvoke is TimeSpan timeSpan && methodName == "AsTime") { return(new ConstantPredicateVisitor(timeSpan.ToIso8601().WrapInQuotes())); } return(new ConstantPredicateVisitor(innerPredicateVisitor.Render().WrapInQuotes())); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); List <IPredicateVisitor> parameters = new List <IPredicateVisitor>(); var methodExpression = (MethodCallExpression)methodCallExpression.Arguments[1]; if (Expression.Lambda(methodExpression).Compile().DynamicInvoke() is IEnumerable <object> arr) { foreach (var element in arr) { parameters.Add( new ConstantPredicateVisitor(element.ToString().WrapInQuotes())); } } CollectionPredicateVisitor collection = new CollectionPredicateVisitor(parameters); EqualPredicateVisitor equal = new EqualPredicateVisitor(parent, collection); return(equal); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { BinaryExpression binaryExpression = expression as BinaryExpression; if (binaryExpression == null) { return(null); } IPredicateVisitor left = predicateVisitorFactory.Create(binaryExpression.Left); string operatorSign = Mapping.GetOperator(expression.NodeType, Mapping.ComparisonOperators); IPredicateVisitor right = predicateVisitorFactory.Create(binaryExpression.Right); ComparisonPredicateVisitor simplePredicateVisitor = new ComparisonPredicateVisitor(left, operatorSign, right); return(simplePredicateVisitor); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } string operatorSign = Mapping.ComparisonMethodOperators[methodCallExpression.Method.Name]; IPredicateVisitor left = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); IPredicateVisitor right = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); BinaryPredicateVisitor binary = new BinaryPredicateVisitor(left, operatorSign, right); return(binary); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { BinaryExpression binaryExpression = expression as BinaryExpression; if (binaryExpression == null) { return(null); } IPredicateVisitor left = predicateVisitorFactory.Create(binaryExpression.Left); IPredicateVisitor right = predicateVisitorFactory.Create(binaryExpression.Right); string operatorSign = Mapping.GetOperator(expression.NodeType, Mapping.ComparisonOperators); // c.Name["en"] == "men" // name(en) = "men" => name(en = "men") // Predicates might need to be rearranged so that the brackets are rendered in a correct way return(CanBeCombined(left) ? CombinePredicates(left, operatorSign, right) : new BinaryPredicateVisitor(left, operatorSign, right)); }
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(); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } string methodName = this.AllowedMethods[methodCallExpression.Method.Name]; ConstantPredicateVisitor methodNameConstant = new ConstantPredicateVisitor(methodName); IPredicateVisitor methodCaller = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); IPredicateVisitor methodArguments = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); ContainerPredicateVisitor container = new ContainerPredicateVisitor(methodArguments, methodNameConstant, true); BinaryPredicateVisitor binary = new BinaryPredicateVisitor(methodCaller, string.Empty, container); return(binary); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } return(predicateVisitorFactory.Create(methodCallExpression.Arguments[0])); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor from = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); IPredicateVisitor to = predicateVisitorFactory.Create(methodCallExpression.Arguments[2]); RangePredicateVisitor range = new RangePredicateVisitor(from, to); RangeCollectionPredicateVisitor ranges = new RangeCollectionPredicateVisitor(new List <RangePredicateVisitor>() { range }); IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); return(new EqualPredicateVisitor(parent, ranges)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { UnaryExpression unaryExpression = expression as UnaryExpression; if (unaryExpression == null) { return(null); } return(predicateVisitorFactory.Create(unaryExpression.Operand)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } IPredicateVisitor inner = predicateVisitorFactory.Create(methodCallExpression.Arguments[1]); var memberExpression = methodCallExpression.Arguments[0] as MemberExpression; // Id string currentName = memberExpression.Member.Name; ConstantPredicateVisitor constant = new ConstantPredicateVisitor(currentName); IPredicateVisitor parent = predicateVisitorFactory.Create(memberExpression); return(CanBeCombined(parent) ? CombinePredicates(parent, inner) : new ContainerPredicateVisitor(inner, constant)); }
private static IEnumerable <IPredicateVisitor> GetArguments(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { List <IPredicateVisitor> arguments = new List <IPredicateVisitor>(); if (expression.NodeType == ExpressionType.NewArrayInit) { foreach (Expression part in ((NewArrayExpression)expression).Expressions) { IPredicateVisitor predicateVisitor = predicateVisitorFactory.Create(part); arguments.Add(predicateVisitor); } } else { IPredicateVisitor predicateVisitor = predicateVisitorFactory.Create(expression); arguments.Add(predicateVisitor); } return(arguments); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression?.Object != null) { return(predicateVisitorFactory.Create(methodCallExpression.Object)); } return(null); }
private static IPredicateVisitor GetAttributeName(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { if (expression is BinaryExpression nameExpression) { if (nameExpression.Left is MemberExpression memberExpression && memberExpression.Member.Name == "Name") { return(RemoveQuotesWithCaseSensitive(predicateVisitorFactory.Create(nameExpression.Right))); } } return(null); }