コード例 #1
0
        public void Build <T>(QueryBuilderContext <T> ctx) where T : class, new()
        {
            var softDeletesQuery = ctx.GetSourceAs <ISoftDeletesQuery>();

            if (softDeletesQuery == null || softDeletesQuery.IncludeSoftDeletes)
            {
                return;
            }

            var idsQuery = ctx.GetSourceAs <IIdentityQuery>();
            var opt      = ctx.GetOptionsAs <IElasticQueryOptions>();

            if (opt == null || !opt.SupportsSoftDeletes || (idsQuery != null && idsQuery.Ids.Count > 0))
            {
                return;
            }

            var missingFilter = new MissingFilter {
                Field = Deleted
            };
            var termFilter = new TermFilter {
                Field = Deleted, Value = softDeletesQuery.IncludeSoftDeletes
            };

            ctx.Filter &= (new FilterContainer(missingFilter) || new FilterContainer(termFilter));
        }
コード例 #2
0
        public async Task <int> Count(TermFilter filter)
        {
            IQueryable <TermDAO> termDAOs = examRegContext.Term.AsNoTracking();

            termDAOs = DynamicFilter(termDAOs, filter);
            return(await termDAOs.CountAsync());
        }
コード例 #3
0
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			var j = JObject.Load(reader);
			if (j == null || !j.HasValues)
				return null;

			ITermFilter filter = new TermFilter();
			foreach (var jv in j)
			{
				switch (jv.Key)
				{
					case "boost":
						filter.Boost = jv.Value.Value<double?>();
						break;
					case "_cache":
						filter.Cache = jv.Value.Value<bool?>();
						break;
					case "_cacheKey":
					case "_cache_key":
						filter.CacheKey = jv.Value.Value<string>();
						break;
					case "_name":
						filter.FilterName = jv.Value.Value<string>();
						break;
					default:
						var field = jv.Key;
						filter.Field = field;
						filter.Value = jv.Value.Value<string>();
						break;
				}
			}
			return filter;

		}
コード例 #4
0
        public async Task ShouldSearch()
        {
            /// Arrange
            var channelIds = new List <string> {
                "rootChannel"
            };
            var searchFieldPath =
                nameof(ContentDetail.Audit).ToLowerCamelCase() + "." +
                nameof(UserAudit.CreationDate).ToLowerCamelCase();

            var sortInfos = new List <SortInfo>
            {
                new SortInfo {
                    Direction = SortDirection.Asc, Field = searchFieldPath
                }
            };

            var filter = new TermFilter {
                Field = "contentSchemaId", Term = "ImageMetadata"
            };
            var request = new ContentSearchRequest
            {
                ChannelIds   = channelIds,
                SearchString = "*",
                Sort         = sortInfos,
                Filter       = filter,
                Start        = 0
            };

            /// Act
            ContentSearchResult result = await _client.Contents.SearchAsync(request);

            /// Assert
            Assert.True(result.Results.Count > 0);
        }
コード例 #5
0
        public override ITypeSearch <FindProduct> ApplyFilter(ITypeSearch <FindProduct> query)
        {
            if (string.IsNullOrEmpty(FieldName) == false)
            {
                string fullFieldName = query.Client.GetFullFieldName(FieldName, typeof(double));
                switch (FieldOperator)
                {
                case NumericOperatorSelectionFactory.OperatorNames.GreaterThan:
                    RangeFilter <double> greaterThanFilter = RangeFilter.Create(fullFieldName, FieldValue, double.MaxValue);
                    greaterThanFilter.IncludeLower = false;
                    greaterThanFilter.IncludeUpper = true;
                    query = query.Filter(greaterThanFilter);
                    break;

                case NumericOperatorSelectionFactory.OperatorNames.LessThan:
                    RangeFilter <double> lessThanFilter = RangeFilter.Create(fullFieldName, double.MinValue, FieldValue);
                    lessThanFilter.IncludeLower = false;
                    lessThanFilter.IncludeUpper = true;
                    query = query.Filter(lessThanFilter);
                    break;

                default:
                case NumericOperatorSelectionFactory.OperatorNames.Equal:
                    var termFilter = new TermFilter(fullFieldName, FieldValue);
                    query = query.Filter(termFilter);
                    break;
                }
            }
            return(query);
        }
コード例 #6
0
        public static object MapTo(this TermFilter termFilter, object obj)
        {
            var propertyInfo = obj.GetType().GetProperty(termFilter.FieldName.ToPascalCase());

            if (propertyInfo != null)
            {
                object value = termFilter.Values;
                if (value != null)
                {
                    if (propertyInfo.PropertyType.IsArray)
                    {
                        var elementType  = propertyInfo.PropertyType.GetElementType();
                        var actualValues = Array.CreateInstance(elementType, termFilter.Values.Count);
                        for (var i = 0; i < termFilter.Values.Count; i++)
                        {
                            actualValues.SetValue(termFilter.Values[i].ChangeType(elementType), i);
                        }
                        value = actualValues;
                    }
                    else
                    {
                        value = termFilter.Values.FirstOrDefault().ChangeType(propertyInfo.PropertyType);
                    }
                }
                propertyInfo.SetValue(obj, value, null);
            }
            return(obj);
        }
コード例 #7
0
        public void SerializerTermFilter()
        {
            JsonSerializer jsonSerializer = new JsonSerializer();
            TermFilter     termFilter     = new TermFilter("filterfield", "filtervalue");

            string jsonString = jsonSerializer.Serialize(termFilter);

            Console.WriteLine(jsonString);
        }
コード例 #8
0
 public async Task <Term[]> GetTermsAsync(string taxonomy, TermFilter filter)
 {
     return(await Task.Factory.FromAsync
            (
                WordPressService.BeginGetTerms(WordPressSiteConfig.BlogId, WordPressSiteConfig.Username,
                                               WordPressSiteConfig.Password, taxonomy, filter),
                WordPressService.EndGetTerms
            ));
 }
コード例 #9
0
        public IndexSearchRequestBuilder ParseFacets(ISearchPhraseParser phraseParser, string facetPhrase, IList <AggregationRequest> predefinedAggregations = null)
        {
            if (phraseParser == null)
            {
                throw new ArgumentNullException(nameof(phraseParser));
            }
            SearchRequest.Aggregations = predefinedAggregations ?? new List <AggregationRequest>();

            if (string.IsNullOrEmpty(facetPhrase))
            {
                return(this);
            }

            //TODO: Support aliases for Facet expressions e.g price.usd[TO 200) as price_below_200
            //TODO: Need to create a new  Antlr file with g4-lexer rules and generate parser especially for facets expression that will return proper AggregationRequests objects
            var parseResult = phraseParser.Parse(facetPhrase);

            //Term facets
            if (!string.IsNullOrEmpty(parseResult.Keyword))
            {
                var termFacetExpressions = parseResult.Keyword.Split(" ");
                parseResult.Filters.AddRange(termFacetExpressions.Select(x => new TermFilter
                {
                    FieldName = x,
                    Values    = new List <string>()
                }));
            }

            SearchRequest.Aggregations = parseResult.Filters
                                         .Select <IFilter, AggregationRequest>(filter =>
            {
                FilterSyntaxMapper.MapFilterAdditionalSyntax(filter);

                return(filter switch
                {
                    RangeFilter rangeFilter => new RangeAggregationRequest
                    {
                        Id = filter.Stringify(),
                        FieldName = rangeFilter.FieldName,
                        Values = rangeFilter.Values.Select(x => new RangeAggregationRequestValue
                        {
                            Id = x.Stringify(),
                            Lower = x.Lower,
                            Upper = x.Upper,
                            IncludeLower = x.IncludeLower,
                            IncludeUpper = x.IncludeUpper
                        }).ToList()
                    },
                    TermFilter termFilter => new TermAggregationRequest
                    {
                        FieldName = termFilter.FieldName,
                        Id = filter.Stringify(),
                        Filter = termFilter
                    },
                    _ => null,
                });
            })
コード例 #10
0
ファイル: TermFilterTest.cs プロジェクト: ywscr/lucenenet
        public void TestCachability()
        {
            TermFilter a             = TermFilter(@"field1", @"a");
            var        cachedFilters = new JCG.HashSet <Filter>();

            cachedFilters.Add(a);
            assertTrue(@"Must be cached", cachedFilters.Contains(TermFilter(@"field1", @"a")));
            assertFalse(@"Must not be cached", cachedFilters.Contains(TermFilter(@"field1", @"b")));
            assertFalse(@"Must not be cached", cachedFilters.Contains(TermFilter(@"field2", @"a")));
        }
コード例 #11
0
ファイル: AdminManager.cs プロジェクト: vigneshc91/Billing
        public Admin LoginAdmin(string userName, string password)
        {
            if (String.IsNullOrWhiteSpace(userName) || String.IsNullOrWhiteSpace(password))
            {
                throw new Exception(ErrorConstants.REQUIRED_FIELD_EMPTY);
            }

            try
            {
                var elasticClient = GetElasticClient();

                var userNameFilter = new TermFilter()
                {
                    Field = ConstAdmin.USER_NAME,
                    Value = userName
                };

                var loginFilters = new List <FilterContainer>();
                loginFilters.Add(userNameFilter);

                var loginFilter = new AndFilter();
                loginFilter.Filters = loginFilters;

                var loginResponse = elasticClient.Search <Admin>(s => s
                                                                 .Index(ElasticMappingConstants.INDEX_NAME)
                                                                 .Type(ElasticMappingConstants.TYPE_ADMIN)
                                                                 .Filter(loginFilter)
                                                                 .Size(1));

                var admin = new Admin();

                if (loginResponse.Total > 0)
                {
                    foreach (IHit <Admin> hit in loginResponse.Hits)
                    {
                        admin = hit.Source;
                    }
                    if (!PasswordHash.ValidatePassword(password, admin.password, admin.salt))
                    {
                        throw new Exception(ErrorConstants.WRONG_PASSWORD);
                    }
                    return(admin);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.GetBaseException().Message);
                return(null);
            }
        }
コード例 #12
0
ファイル: AdminManager.cs プロジェクト: vigneshc91/Billing
        public bool CreateAdmin(Admin admin, string userName)
        {
            if (String.IsNullOrWhiteSpace(userName))
            {
                throw new Exception(ErrorConstants.REQUIRED_FIELD_EMPTY);
            }
            if (admin == null || admin.type != (int)BillingEnums.USER_TYPE.SUPER_ADMIN)
            {
                throw new Exception(ErrorConstants.NO_PREVILAGE);
            }

            var newAdmin = new Admin()
            {
                id         = Guid.NewGuid(),
                username   = userName,
                type       = (int)BillingEnums.USER_TYPE.ADMIN,
                created_at = DateTime.UtcNow
            };

            try
            {
                var elasticClient = GetElasticClient();

                var userNameFilter = new TermFilter()
                {
                    Field = ConstAdmin.USER_NAME,
                    Value = userName
                };

                var adminList = elasticClient.Search <Admin>(s => s
                                                             .Index(ElasticMappingConstants.INDEX_NAME)
                                                             .Type(ElasticMappingConstants.TYPE_ADMIN)
                                                             .Filter(userNameFilter)
                                                             );

                if (adminList.Total > 0)
                {
                    throw new Exception(ErrorConstants.ADMIN_USERNAME_ALREADY_TAKEN);
                }

                var response = elasticClient.Index <Admin>(newAdmin, i => i
                                                           .Index(ElasticMappingConstants.INDEX_NAME)
                                                           .Type(ElasticMappingConstants.TYPE_ADMIN)
                                                           );

                return(response.Created);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.GetBaseException().Message);
                throw e;
            }
        }
コード例 #13
0
        private static Filter CreateTermFilter(TermFilter termFilter, ICollection <string> availableFields)
        {
            Filter result = null;

            if (termFilter?.FieldName != null && termFilter.Values != null)
            {
                var isBooleanField = availableFields.Contains(LuceneSearchHelper.GetBooleanFieldName(termFilter.FieldName));
                var values         = termFilter.Values.Select(v => GetFilterValue(v, isBooleanField)).ToArray();

                var fieldName = LuceneSearchHelper.ToLuceneFieldName(termFilter.FieldName);
                result = CreateTermsFilter(fieldName, values);
            }

            return(result);
        }
コード例 #14
0
        protected virtual IFilter ConvertAttributeFilter(AttributeFilter attributeFilter, IList <string> valueIds)
        {
            var knownValues = attributeFilter.Values
                              ?.Where(v => valueIds.Contains(v.Id, StringComparer.OrdinalIgnoreCase))
                              .Select(v => v.Id)
                              .ToArray();

            var result = new TermFilter
            {
                FieldName = attributeFilter.Key,
                Values    = knownValues != null && knownValues.Any() ? knownValues : valueIds,
            };

            return(result);
        }
コード例 #15
0
ファイル: TermFilterTest.cs プロジェクト: ywscr/lucenenet
        public void TestRandom()
        {
            Directory         dir = NewDirectory();
            RandomIndexWriter w   = new RandomIndexWriter(
#if FEATURE_INSTANCE_TESTDATA_INITIALIZATION
                this,
#endif
                Random, dir);
            int num   = AtLeast(100);
            var terms = new JCG.List <Term>();

            for (int i = 0; i < num; i++)
            {
                string field = @"field" + i;
                string str   = TestUtil.RandomRealisticUnicodeString(Random);
                terms.Add(new Term(field, str));
                Document doc = new Document();
                doc.Add(NewStringField(field, str, Field.Store.NO));
                w.AddDocument(doc);
            }

            IndexReader reader = w.GetReader();

            w.Dispose();

            IndexSearcher searcher = NewSearcher(reader);

            int numQueries = AtLeast(10);

            for (int i = 0; i < numQueries; i++)
            {
                Term    term        = terms[Random.nextInt(num)];
                TopDocs queryResult = searcher.Search(new TermQuery(term), reader.MaxDoc);

                MatchAllDocsQuery matchAll     = new MatchAllDocsQuery();
                TermFilter        filter       = TermFilter(term);
                TopDocs           filterResult = searcher.Search(matchAll, filter, reader.MaxDoc);
                assertEquals(filterResult.TotalHits, queryResult.TotalHits);
                ScoreDoc[] scoreDocs = filterResult.ScoreDocs;
                for (int j = 0; j < scoreDocs.Length; j++)
                {
                    assertEquals(scoreDocs[j].Doc, queryResult.ScoreDocs[j].Doc);
                }
            }

            reader.Dispose();
            dir.Dispose();
        }
コード例 #16
0
 protected override Expression VisitTypeBinary(TypeBinaryExpression node)
 {
     if (node.NodeType == ExpressionType.TypeIs)
     {
         var fieldName = conventions.FieldNameConvention.GetFieldName(node.Expression);
         if (!string.IsNullOrEmpty(fieldName))
         {
             fieldName += ".";
         }
         fieldName += TypeHierarchyInterceptor.TypeHierarchyJsonPropertyName;
         var typeHiearchyFilter = new TermFilter(fieldName,
                                                 TypeHierarchyInterceptor.GetTypeName(node.TypeOperand));
         AddFilter(typeHiearchyFilter);
     }
     return(base.VisitTypeBinary(node));
 }
コード例 #17
0
        /*private async Task<bool> ValidateExist(Term Term)
         * {
         *  TermFilter filter = new TermFilter
         *  {
         *      Take = Int32.MaxValue,
         *      SubjectName = new StringFilter { Equal = Term.SubjectName },
         *      SemesterCode = new StringFilter { Equal = Term.SemesterCode }
         *  };
         *
         *  int count = await UOW.TermRepository.Count(filter);
         *  if (count == 0)
         *  {
         *      Term.AddError(nameof(TermValidator), nameof(Term), ERROR.NotExisted);
         *      return false;
         *  }
         *  return true;
         * }*/

        private async Task <bool> ValidateId(Term Term)
        {
            TermFilter filter = new TermFilter
            {
                Id = new GuidFilter {
                    Equal = Term.Id
                }
            };
            int count = await UOW.TermRepository.Count(filter);

            if (count == 0)
            {
                Term.AddError(nameof(TermValidator), nameof(Term), ERROR.IdNotFound);
            }

            return(count == 1);
        }
コード例 #18
0
        private static QueryContainer CreateTermFilter(TermFilter termFilter, Properties <IProperties> availableFields)
        {
            var termValues = termFilter.Values;

            var field = availableFields.Where(kvp => kvp.Key.Name.EqualsInvariant(termFilter.FieldName)).Select(kvp => kvp.Value).FirstOrDefault();

            if (field?.Type?.Name?.EqualsInvariant("boolean") == true)
            {
                termValues = termValues.Select(v => v.ToLowerInvariant()).ToArray();
            }

            return(new TermsQuery
            {
                Field = ElasticSearchHelper.ToElasticFieldName(termFilter.FieldName),
                Terms = termValues
            });
        }
コード例 #19
0
        public void TestHashCodeAndEquals()
        {
            int num = AtLeast(100);

            for (int i = 0; i < num; i++)
            {
                string     field1  = @"field" + i;
                string     field2  = @"field" + i + num;
                string     value1  = TestUtil.RandomRealisticUnicodeString(Random);
                string     value2  = value1 + @"x";
                TermFilter filter1 = TermFilter(field1, value1);
                TermFilter filter2 = TermFilter(field1, value2);
                TermFilter filter3 = TermFilter(field2, value1);
                TermFilter filter4 = TermFilter(field2, value2);
                var        filters = new TermFilter[]
                {
                    filter1, filter2, filter3, filter4
                };

                for (int j = 0; j < filters.Length; j++)
                {
                    TermFilter termFilter = filters[j];
                    for (int k = 0; k < filters.Length; k++)
                    {
                        TermFilter otherTermFilter = filters[k];
                        if (j == k)
                        {
                            assertEquals(termFilter, otherTermFilter);
                            assertEquals(termFilter.GetHashCode(), otherTermFilter.GetHashCode());
                            assertTrue(termFilter.Equals(otherTermFilter));
                        }
                        else
                        {
                            assertFalse(termFilter.Equals(otherTermFilter));
                        }
                    }
                }

                TermFilter filter5 = TermFilter(field2, value2);
                assertEquals(filter5, filter4);
                assertEquals(filter5.GetHashCode(), filter4.GetHashCode());
                assertTrue(filter5.Equals(filter4));
                assertEquals(filter5, filter4);
                assertTrue(filter5.Equals(filter4));
            }
        }
コード例 #20
0
        public void FillIsAppliedForItems_TermFilter_IsAppliedSetProperly(string termValue, object aggregationItemValue, bool expectedIsApplied)
        {
            // Arrange
            var filter = new TermFilter()
            {
                Values = new string[] { termValue }
            };
            var aggregationItem = new AggregationItem()
            {
                Value = aggregationItemValue
            };

            // Act
            filter.FillIsAppliedForItems(new[] { aggregationItem });

            // Assert
            Assert.Equal(expectedIsApplied, aggregationItem.IsApplied);
        }
コード例 #21
0
        private IQueryable <TermDAO> DynamicOrder(IQueryable <TermDAO> query, TermFilter filter)
        {
            switch (filter.OrderType)
            {
            case OrderType.ASC:
                switch (filter.OrderBy)
                {
                case TermOrder.SubjectName:
                    query = query.OrderBy(q => q.SubjectName);
                    break;

                case TermOrder.SemesterCode:
                    query = query.OrderBy(q => q.Semester.StartYear);
                    break;

                default:
                    query = query.OrderBy(q => q.CX);
                    break;
                }
                break;

            case OrderType.DESC:
                switch (filter.OrderBy)
                {
                case TermOrder.SubjectName:
                    query = query.OrderByDescending(q => q.SubjectName);
                    break;

                case TermOrder.SemesterCode:
                    query = query.OrderByDescending(q => q.Semester.StartYear);
                    break;

                default:
                    query = query.OrderByDescending(q => q.CX);
                    break;
                }
                break;

            default:
                query = query.OrderBy(q => q.CX);
                break;
            }
            return(query.Skip(filter.Skip).Take(filter.Take));
        }
コード例 #22
0
        private static string CreateTermFilter(TermFilter termFilter, IList <Field> availableFields)
        {
            string result;

            var availableField = availableFields.Get(termFilter.FieldName);

            if (availableField != null)
            {
                result = availableField.Type.ToString().StartsWith("Collection(")
                    ? GetContainsFilterExpression(availableField, termFilter.Values)
                    : GetEqualsFilterExpression(availableField, termFilter.Values);
            }
            else
            {
                result = AzureSearchHelper.NonExistentFieldFilter;
            }

            return(result);
        }
コード例 #23
0
        public override void BuildFilter <T>(object query, object options, ref FilterContainer container)
        {
            var softDeletesQuery = query as ISoftDeletesQuery;

            if (softDeletesQuery == null)
            {
                return;
            }

            var opt = options as IQueryOptions;

            if (opt == null || !opt.SupportsSoftDeletes)
            {
                return;
            }

            container &= new TermFilter {
                Field = "deleted", Value = softDeletesQuery.IncludeSoftDeletes
            };
        }
コード例 #24
0
        public override void ExitAttributeFilter(Antlr.SearchPhraseParser.AttributeFilterContext context)
        {
            base.ExitAttributeFilter(context);

            var fieldNameContext      = context.GetChild <Antlr.SearchPhraseParser.FieldNameContext>(0);
            var attributeValueContext = context.GetChild <Antlr.SearchPhraseParser.AttributeFilterValueContext>(0);

            if (fieldNameContext != null && attributeValueContext != null)
            {
                var values = attributeValueContext.children.OfType <Antlr.SearchPhraseParser.StringContext>().ToArray();

                var filter = new TermFilter
                {
                    FieldName = Unescape(fieldNameContext.GetText()),
                    Values    = values.Select(v => Unescape(v.GetText())).ToArray(),
                };

                Filters.Add(filter);
            }
        }
コード例 #25
0
        protected virtual TermFilter GetTermFilter(Antlr.SearchPhraseParser.AttributeFilterContext context)
        {
            var fieldNameContext      = context.GetChild <Antlr.SearchPhraseParser.FieldNameContext>(0);
            var attributeValueContext = context.GetChild <Antlr.SearchPhraseParser.AttributeFilterValueContext>(0);

            if (fieldNameContext == null || attributeValueContext == null)
            {
                return(null);
            }

            var values = attributeValueContext.children.OfType <Antlr.SearchPhraseParser.StringContext>().ToArray();

            var filter = new TermFilter
            {
                FieldName = Unescape(fieldNameContext.GetText()),
                Values    = values.Select(v => Unescape(v.GetText())).ToArray(),
            };

            return(filter);
        }
コード例 #26
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var j = JObject.Load(reader);

            if (j == null || !j.HasValues)
            {
                return(null);
            }

            ITermFilter filter = new TermFilter();

            foreach (var jv in j)
            {
                switch (jv.Key)
                {
                case "boost":
                    filter.Boost = jv.Value.Value <double?>();
                    break;

                case "_cache":
                    filter.Cache = jv.Value.Value <bool?>();
                    break;

                case "_cacheKey":
                case "_cache_key":
                    filter.CacheKey = jv.Value.Value <string>();
                    break;

                case "_name":
                    filter.FilterName = jv.Value.Value <string>();
                    break;

                default:
                    var field = jv.Key;
                    filter.Field = field;
                    filter.Value = jv.Value.Value <string>();
                    break;
                }
            }
            return(filter);
        }
コード例 #27
0
        public void AddSuperAdmin()
        {
            var elasticClient = GetElasticClient();

            var termFilter = new TermFilter()
            {
                Field = ConstAdmin.TYPE,
                Value = (short)BillingEnums.USER_TYPE.SUPER_ADMIN
            };

            try
            {
                var response = elasticClient.Search <Admin>(a => a
                                                            .Index(ElasticMappingConstants.INDEX_NAME)
                                                            .Type(ElasticMappingConstants.TYPE_ADMIN)
                                                            .Filter(termFilter)
                                                            .Take(1));

                if (response.Total == 0)
                {
                    var salt  = PasswordHash.GenerateSalt();
                    var admin = new Admin()
                    {
                        id         = Guid.NewGuid(),
                        username   = AppConstants.SUPER_ADMIN_USER_NAME,
                        salt       = salt,
                        password   = PasswordHash.CreateHash(AppConstants.SUPER_ADMIN_PASSWORD, salt),
                        type       = (int)BillingEnums.USER_TYPE.SUPER_ADMIN,
                        created_at = DateTime.UtcNow
                    };

                    var create = elasticClient.Index <Admin>(admin, i => i
                                                             .Index(ElasticMappingConstants.INDEX_NAME)
                                                             .Type(ElasticMappingConstants.TYPE_ADMIN));
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.GetBaseException().Message);
            }
        }
コード例 #28
0
        public override void BuildFilter <T>(object query, object options, ref FilterContainer container)
        {
            var fieldValuesQuery = query as IFieldConditionsQuery;

            if (fieldValuesQuery?.FieldConditions == null || fieldValuesQuery.FieldConditions.Count <= 0)
            {
                return;
            }

            foreach (var fieldValue in fieldValuesQuery.FieldConditions)
            {
                switch (fieldValue.Operator)
                {
                case ComparisonOperator.Equals:
                    container &= new TermFilter {
                        Field = fieldValue.Field, Value = fieldValue.Value
                    };
                    break;

                case ComparisonOperator.NotEquals:
                    container &= new NotFilter {
                        Filter = FilterContainer.From(new TermFilter {
                            Field = fieldValue.Field, Value = fieldValue.Value
                        })
                    };
                    break;

                case ComparisonOperator.IsEmpty:
                    container &= new MissingFilter {
                        Field = fieldValue.Field
                    };
                    break;

                case ComparisonOperator.HasValue:
                    container &= new ExistsFilter {
                        Field = fieldValue.Field
                    };
                    break;
                }
            }
        }
コード例 #29
0
        private async Task <bool> ValidateNotExist(Term Term)
        {
            TermFilter filter = new TermFilter
            {
                SubjectName = new StringFilter {
                    Equal = Term.SubjectName
                },
                SemesterCode = new StringFilter {
                    Equal = Term.SemesterCode
                }
            };

            int count = await UOW.TermRepository.Count(filter);

            if (count > 0)
            {
                Term.AddError(nameof(TermValidator), nameof(Term), ERROR.TermExisted);
                return(false);
            }
            return(true);
        }
コード例 #30
0
        private IQueryable <TermDAO> DynamicFilter(IQueryable <TermDAO> query, TermFilter filter)
        {
            if (filter == null)
            {
                return(query.Where(q => 1 == 0));
            }
            //query = query.Where(q => q.Semester.Id, filter.SemesterId);
            if (filter.SemesterCode != null)
            {
                string[] codeData = filter.SemesterCode.Equal.Split("_");
                query = query.Where(q => q.Semester.StartYear, new ShortFilter {
                    Equal = short.Parse(codeData[0])
                });
                query = query.Where(q => q.Semester.EndYear, new ShortFilter {
                    Equal = short.Parse(codeData[1])
                });
                query = query.Where(q => q.Semester.IsFirstHalf == (codeData[2] == "1" ? true : false));
            }
            if (filter.Id != null)
            {
                query = query.Where(q => q.Id, filter.Id);
            }
            if (filter.StudentNumber != null)
            {
                if (filter.StudentNumber.Equal.HasValue)
                {
                    query = query.Where(q => q.StudentTerms.Select(s => s.Student.StudentNumber == filter.StudentNumber.Equal.Value).Contains(true));
                }
            }
            if (filter.SubjectName != null)
            {
                query = query.Where(q => q.SubjectName, filter.SubjectName);
            }
            if (filter.SemesterId != null)
            {
                query = query.Where(q => q.SemesterId, filter.SemesterId);
            }

            return(query);
        }
コード例 #31
0
        public async Task <List <TermDTO> > ListTerm()
        {
            ExamProgram currentExamProgram = await ExamProgramService.GetCurrentExamProgram();

            TermFilter filter = new TermFilter
            {
                StudentNumber = new IntFilter {
                    Equal = CurrentContext.StudentNumber
                },
                SemesterId = new GuidFilter {
                    Equal = currentExamProgram.SemesterId
                }
            };
            List <Term> res = await TermService.List(filter);

            return(res.Select(r => new TermDTO
            {
                Id = r.Id,
                SemesterId = r.SemesterId,
                SubjectName = r.SubjectName,
                SemesterCode = r.SemesterCode,
                ExamPeriods = r.ExamPeriods
                              .Where(e => e.ExamProgramId.Equals(currentExamProgram.Id))
                              .Select(e => new ExamPeriodDTO
                {
                    Id = e.Id,
                    ExamProgramId = e.ExamProgramId,
                    TermId = e.TermId,
                    SubjectName = e.SubjectName,
                    StartHour = e.StartHour,
                    FinishHour = e.FinishHour,
                    ExamDate = e.ExamDate.ToString("dd-MM-yyyy"),
                    ExamProgramName = e.ExamProgramName,
                    Errors = e.Errors
                })
                              .ToList(),
                IsQualified = r.QualifiedStudents.Where(q => q.StudentNumber == CurrentContext.StudentNumber).Any(),
                Errors = r.Errors
            }).ToList());
        }
コード例 #32
0
        public override ITypeSearch<FindProduct> ApplyFilter(ITypeSearch<FindProduct> query)
        {
            if(string.IsNullOrEmpty(FieldName) == false)
            {
                string fullFieldName = query.Client.GetFullFieldName(FieldName, typeof(double));
                switch (FieldOperator)
                {
                    case NumericOperatorSelectionFactory.OperatorNames.GreaterThan:
                        RangeFilter<double> greaterThanFilter = RangeFilter.Create(fullFieldName, FieldValue, double.MaxValue);
                        greaterThanFilter.IncludeLower = false;
                        greaterThanFilter.IncludeUpper = true;
                        query = query.Filter(greaterThanFilter);
                        break;
                    case NumericOperatorSelectionFactory.OperatorNames.LessThan:
                        RangeFilter<double> lessThanFilter = RangeFilter.Create(fullFieldName, double.MinValue, FieldValue);
                        lessThanFilter.IncludeLower = false;
                        lessThanFilter.IncludeUpper = true;
                        query = query.Filter(lessThanFilter);
                        break;
                    default:
                    case NumericOperatorSelectionFactory.OperatorNames.Equal:
                        var termFilter = new TermFilter(fullFieldName, FieldValue);
                        query = query.Filter(termFilter);
                        break;

                }
            }
            return query;
        }