コード例 #1
0
        public static ITypeSearch <T> Filter <T>(this ITypeSearch <T> query, IFilterStatementRequest request) where T : IContent
        {
            if (request?.Filters?.Items == null)
            {
                return(query);
            }
            var filterBuilder = ClientExtensions.BuildFilter <T>(SearchClient.Instance);

            filterBuilder = request.Filters.Items.Aggregate(filterBuilder, (builder, item) =>
            {
                if (item.Connector == FilterStatementConnector.And)
                {
                    return(builder.And(GetExpression <T>(item)));
                }
                else
                {
                    var expression = GetExpression <T>(item);
                    if (expression == null)
                    {
                        expression = GetExpression <T>(item);
                    }
                    return(expression == null ? builder : builder.Or(expression));
                }
            });

            if (filterBuilder.HasFilter)
            {
                query = TypeSearchExtensions.Filter(query, filterBuilder);
            }

            return(query);
        }
コード例 #2
0
        public static ITypeSearch <T> BuildFacetFor <T>(this ITypeSearch <T> query, FacetSpecification facets) where T : IContent
        {
            if (facets == null)
            {
                return(query);
            }

            foreach (var facet in facets.Items)
            {
                switch (facet.OperationValue)
                {
                case FacetOperation.TermsFacetFor:
                {
                    var lambaExpression = GetLamdaExpression <T>(facet);
                    query = TypeSearchExtensions.TermsFacetFor(query, lambaExpression);
                    break;
                }

                case FacetOperation.RangeFacetFor:
                {
                    if (facet.PropertyType.Name == "DateTime")
                    {
                        var lambaExpression = GetLamdaExpression <T, DateTime>(facet);
                        query = TypeSearchExtensions.RangeFacetFor(query, lambaExpression);
                    }
                    else
                    {
                        var lambaExpression = GetLamdaExpression <T, object>(facet);
                        query = TypeSearchExtensions.RangeFacetFor(query, lambaExpression);
                    }

                    break;
                }

                case FacetOperation.HistogramFacetFor:
                {
                    if (facet.PropertyType.Name == "DateTime")
                    {
                        var lambaExpression = GetLamdaExpression <T, DateTime>(facet);
                        query = TypeSearchExtensions.HistogramFacetFor(query, lambaExpression, (DateInterval)facet.Interval);
                    }
                    else
                    {
                        var lambaExpression = GetLamdaExpression <T, object>(facet);
                        query = TypeSearchExtensions.HistogramFacetFor(query, lambaExpression, (int)facet.Interval);
                    }

                    break;
                }

                default: break;
                }
            }

            return(query);
        }
コード例 #3
0
        private static bool OrderBy <T>(ref ITypeSearch <T> query, object item) where T : ProductContent
        {
            var searchSort = item as SortItem;

            if (searchSort == null)
            {
                return(false);
            }

            var expression = PropertyInfoHelper.GetLamdaExpression <T>(searchSort.Field);

            query = (searchSort.Ascending
                ? TypeSearchExtensions.OrderBy(query, expression)
                : TypeSearchExtensions.OrderByDescending(query, expression));

            return(true);
        }