Ejemplo n.º 1
0
        private Func <QueryContainerDescriptor <T>, QueryContainer> CreateRangeForDuplicateField <T>(string propertyEntityName,
                                                                                                     string fieldName,
                                                                                                     IList <FilterCriteriaArgs> duplicateFields)
            where T : class
        {
            IDateRangeQuery DateRange(DateRangeQueryDescriptor <T> descriptor)
            {
                IDateRangeQuery dateRangeQuery = descriptor
                                                 .Name(fieldName)
                                                 .Field(fieldName)
                                                 .Relation(RangeRelation.Within);

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

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

                return(dateRangeQuery);
            }

            return(CreateFilter <T>(propertyEntityName, DateRange));
        }
Ejemplo n.º 2
0
        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 DateFilterValue dateFilterValue))
            {
                return(descriptor => descriptor);
            }

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

            IDateRangeQuery DateRange(DateRangeQueryDescriptor <T> descriptor)
            {
                IDateRangeQuery dateRangeQuery = descriptor
                                                 .Name("")
                                                 .Field(fieldName);

                CreateRangeDescriptor(args.Operator, descriptor, dateFilterValue);

                return(dateRangeQuery);
            }

            return(CreateFilter <T>(args.ParentPropertyName, DateRange));
        }
Ejemplo n.º 3
0
        private Func <QueryContainerDescriptor <T>, QueryContainer> CreateRangeGroupForDuplicateField <T>(string propertyEntityName,
                                                                                                          string fieldName,
                                                                                                          IEnumerable <FilterCriteriaArgs> duplicateOperatorFields)
            where T : class
        {
            ICollection <Func <QueryContainerDescriptor <T>, QueryContainer> > dateFilterQueries = new List <Func <QueryContainerDescriptor <T>, QueryContainer> >();

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

                IDateRangeQuery DateRange(DateRangeQueryDescriptor <T> descriptor)
                {
                    IDateRangeQuery numericRangeQuery = descriptor
                                                        .Name($"{fieldName}.{dateFilterValue}")
                                                        .Field(fieldName);

                    CreateRangeDescriptor(duplicateField.Operator, descriptor, dateFilterValue);

                    return(numericRangeQuery);
                }

                var dateFilter = CreateFilter <T>(propertyEntityName, DateRange);

                dateFilterQueries.Add(dateFilter);
            }

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

            return(Filter);
        }
Ejemplo n.º 4
0
 internal static bool IsConditionless(IDateRangeQuery q)
 {
     return(q.Field.IsConditionless() ||
            (q.GreaterThanOrEqualTo == null &&
             q.LessThanOrEqualTo == null &&
             q.GreaterThan == null &&
             q.LessThan == null));
 }
Ejemplo n.º 5
0
 public virtual void Visit(IDateRangeQuery query)
 {
 }
Ejemplo n.º 6
0
 internal static bool IsConditionless(IDateRangeQuery q) => q.Field.IsConditionless() ||
 ((q.GreaterThanOrEqualTo == null || !q.GreaterThanOrEqualTo.IsValid) &&
  (q.LessThanOrEqualTo == null || !q.LessThanOrEqualTo.IsValid) &&
  (q.GreaterThan == null || !q.GreaterThan.IsValid) &&
  (q.LessThan == null || !q.LessThan.IsValid));
 public virtual void Visit(IDateRangeQuery query) => Write("date_range");
		public void Visit(IDateRangeQuery query) => Write("date_range");
Ejemplo n.º 9
0
		public virtual void Visit(IDateRangeQuery query) { }