private static IPredicateVisitor CombinePredicateVisitors(IPredicateVisitor left, IPredicateVisitor right) { EqualPredicateVisitor equalLeft = left as EqualPredicateVisitor; EqualPredicateVisitor equalRight = right as EqualPredicateVisitor; Visitors.AccessorPredicateVisitor accessorLeft = equalLeft?.Left as Visitors.AccessorPredicateVisitor; Visitors.AccessorPredicateVisitor accessorRight = equalRight?.Left as Visitors.AccessorPredicateVisitor; IPredicateVisitor collection; if (equalLeft?.Right is RangeCollectionPredicateVisitor rangeLeft && equalRight?.Right is RangeCollectionPredicateVisitor rangeRight) { List <RangePredicateVisitor> combinedRanges = new List <RangePredicateVisitor>(); combinedRanges.AddRange(rangeLeft.Ranges); combinedRanges.AddRange(rangeRight.Ranges); collection = new RangeCollectionPredicateVisitor(combinedRanges); }
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)); }