internal static bool IsConditionless(INumericRangeQuery q)
 {
     return(q.Field.IsConditionless() ||
            (q.GreaterThanOrEqualTo == null &&
             q.LessThanOrEqualTo == null &&
             q.GreaterThan == null &&
             q.LessThan == null));
 }
        public Func <QueryContainerDescriptor <T>, QueryContainer> ComposeFilter <T>(FilterCriteriaArgs args)
            where T : class
        {
            var fieldName = string.IsNullOrWhiteSpace(args.ParentPropertyName)
                                ? args.PropertyName
                                : $"{args.ParentPropertyName}.{args.PropertyName}";

            if (!(args.FilterValue is NumericFilterValue numericFilterValue))
            {
                return(descriptor => descriptor);
            }

            if (args.Operator == OperatorType.Different)
            {
                return(DifferentOperatorFilter <T>(fieldName, args.ParentPropertyName, numericFilterValue.Value));
            }

            INumericRangeQuery NumericRange(NumericRangeQueryDescriptor <T> descriptor)
            {
                INumericRangeQuery numericRangeQuery = descriptor
                                                       .Name(fieldName)
                                                       .Field(fieldName)
                                                       .Relation(RangeRelation.Within);

                CreateRangeDescriptor(args.Operator, descriptor, numericFilterValue);

                return(numericRangeQuery);
            }

            Func <QueryContainerDescriptor <T>, QueryContainer> filter;

            if (string.IsNullOrWhiteSpace(args.ParentPropertyName))
            {
                filter = q => q.Range(NumericRange);
            }
            else
            {
                filter = q => q.Nested(n => n
                                       .Path(args.ParentPropertyName)
                                       .Query(query => query.Range(NumericRange))
                                       );
            }

            return(filter);
        }
        private Func <QueryContainerDescriptor <T>, QueryContainer> CreateRangeGroupForDuplicateField <T>(IEnumerable <FilterCriteriaArgs> duplicateOperatorFields,
                                                                                                          string propertyEntityName,
                                                                                                          string fieldName)
            where T : class
        {
            ICollection <Func <QueryContainerDescriptor <T>, QueryContainer> > numericFilterQueries = new List <Func <QueryContainerDescriptor <T>, QueryContainer> >();

            foreach (var duplicateField in duplicateOperatorFields)
            {
                if (!(duplicateField.FilterValue is NumericFilterValue numericFilterValue))
                {
                    continue;
                }

                INumericRangeQuery NumericRange(NumericRangeQueryDescriptor <T> descriptor)
                {
                    INumericRangeQuery numericRangeQuery = descriptor
                                                           .Name($"{fieldName}.{numericFilterValue}")
                                                           .Field(fieldName);

                    CreateRangeDescriptor(duplicateField.Operator, descriptor, numericFilterValue);

                    return(numericRangeQuery);
                }

                Func <QueryContainerDescriptor <T>, QueryContainer> filter;
                if (string.IsNullOrWhiteSpace(propertyEntityName))
                {
                    filter = q => q.Range(NumericRange);
                }
                else
                {
                    filter = q => q.Nested(n => n
                                           .Path(propertyEntityName)
                                           .Query(query => query.Range(NumericRange))
                                           );
                }

                numericFilterQueries.Add(filter);
            }

            QueryContainer Filter(QueryContainerDescriptor <T> q) => q.Bool(b => b.Should(numericFilterQueries));

            return(Filter);
        }
        private Func <QueryContainerDescriptor <T>, QueryContainer> CreateRangeForDuplicateField <T>(string fieldName,
                                                                                                     string propertyEntityName,
                                                                                                     IList <FilterCriteriaArgs> duplicateFields)
            where T : class
        {
            INumericRangeQuery NumericRange(NumericRangeQueryDescriptor <T> descriptor)
            {
                INumericRangeQuery numericRangeQuery = descriptor
                                                       .Name(fieldName)
                                                       .Field(fieldName)
                                                       .Relation(RangeRelation.Within);

                foreach (var duplicateField in duplicateFields)
                {
                    if (!(duplicateField.FilterValue is NumericFilterValue value))
                    {
                        continue;
                    }

                    CreateRangeDescriptor(duplicateField.Operator, descriptor, value);
                }

                return(numericRangeQuery);
            }

            Func <QueryContainerDescriptor <T>, QueryContainer> filter;

            if (string.IsNullOrWhiteSpace(propertyEntityName))
            {
                filter = q => q.Range(NumericRange);
            }
            else
            {
                filter = q => q.Nested(n => n
                                       .Path(propertyEntityName)
                                       .Query(query => query.Range(NumericRange))
                                       );
            }

            return(filter);
        }
Ejemplo n.º 5
0
 public virtual void Visit(INumericRangeQuery query)
 {
 }
 public virtual void Visit(INumericRangeQuery query) => Write("numeric_range");
		public void Visit(INumericRangeQuery query) => Write("numeric_range");
Ejemplo n.º 8
0
 public override void Visit(INumericRangeQuery query)
 {
     NumericRangeQuery = query;
     base.Visit(query);
 }
Ejemplo n.º 9
0
		public virtual void Visit(INumericRangeQuery query) { }