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); }
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); }
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); }