public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { if (expression.NodeType == ExpressionType.Constant) { string constantExpression = FormatConstantString(expression); return(new ConstantPredicateVisitor(constantExpression)); } MemberExpression memberExpression = expression as MemberExpression; var compiledValue = Expression.Lambda(expression, null).Compile().DynamicInvoke(null); var result = compiledValue.ToString(); switch (compiledValue) { case DateTime dateTimeValue: return(new ConstantPredicateVisitor(dateTimeValue.ToUtcIso8601().WrapInQuotes())); case Enum enumResult: result = enumResult.GetDescription(); break; } if (memberExpression?.Type == typeof(string) || typeof(Enum).IsAssignableFrom(memberExpression?.Type)) { result = result.WrapInQuotes(); } return(new ConstantPredicateVisitor(result)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { // The value null can be passed in Range method and should be rendered as *. if (expression.NodeType == ExpressionType.Constant && ((ConstantExpression)expression).Value == null) { return(new ConstantPredicateVisitor("*")); } if (expression.NodeType == ExpressionType.Constant) { return(new ConstantPredicateVisitor(expression.ToString())); } MemberExpression memberExpression = expression as MemberExpression; var compiledValue = Expression.Lambda(expression, null).Compile().DynamicInvoke(null); var result = compiledValue.ToString(); if (compiledValue is Enum enumResult) { result = enumResult.GetDescription(); } if (memberExpression?.Type == typeof(string) || typeof(Enum).IsAssignableFrom(memberExpression?.Type)) { result = result.WrapInQuotes(); } return(new ConstantPredicateVisitor(result)); }
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 (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); } 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) { 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 (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); } 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) { 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) { var dynamicInvoke = Expression.Lambda(expression, null).Compile().DynamicInvoke(null); var compiledValue = dynamicInvoke.ToString().WrapInQuotes(); return(new ConstantPredicateVisitor(compiledValue)); }
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) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression?.Object != null) { return(predicateVisitorFactory.Create(methodCallExpression.Object)); } return(null); }
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) { var compiledValue = Expression.Lambda(expression, null).Compile().DynamicInvoke(null).ToString(); if ((expression as MethodCallExpression)?.Arguments[0].Type == typeof(string)) { compiledValue = compiledValue.WrapInQuotes(); } return(new ConstantPredicateVisitor(compiledValue)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } return(predicateVisitorFactory.Create(methodCallExpression.Arguments[0])); }
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); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { UnaryExpression unaryExpression = expression as UnaryExpression; if (unaryExpression == null) { return(null); } IPredicateVisitor cartPredicateVisitorLeft = predicateVisitorFactory.Create(unaryExpression.Operand); return(new NotLogicalPredicateVisitor(cartPredicateVisitorLeft)); }
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) { 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) { 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) { 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) { 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 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) { 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) { MethodCallExpression methodCallExpression = expression as MethodCallExpression; if (methodCallExpression == null) { return(null); } string methodName = FilterMapping.AllowedMethods[methodCallExpression.Method.Name]; ConstantPredicateVisitor method = new ConstantPredicateVisitor(methodName); IPredicateVisitor parent = predicateVisitorFactory.Create(methodCallExpression.Arguments[0]); return(new EqualPredicateVisitor(parent, method)); }
public IPredicateVisitor Convert(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { UnaryExpression unaryExpression = expression as UnaryExpression; if (unaryExpression == null) { return(null); } // c.Key == "c14" IPredicateVisitor inner = predicateVisitorFactory.Create(unaryExpression.Operand); ConstantPredicateVisitor not = new ConstantPredicateVisitor(Mapping.Not); return(new ContainerPredicateVisitor(inner, not)); }
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); }
private static IPredicateVisitor GetName(Expression expression, IPredicateVisitorFactory predicateVisitorFactory) { BinaryExpression binaryExpression = expression as BinaryExpression; if (binaryExpression == null) { return(null); } if (binaryExpression.Left is MemberExpression memberExpression && memberExpression.Member.Name == "Name") { IPredicateVisitor name = predicateVisitorFactory.Create(binaryExpression.Right); return(RemoveQuotesWithCaseSensitive(name)); } return(null); }