internal static IEnumerable <KeyValuePair <string, Expression <Func <FindDocument, Filter> > > > GetFacets(this ITypeSearch <FindDocument> search, SearchFilter filter, string locale) { ISearchConfiguration config = search.Client.GetConfiguration(); IFieldConfiguration field; int index; if (FindProviderExtensions.IsSimpleFacet(filter) && config.TryGetField(filter.field, locale, out field)) { SimpleValue[] simpleValueArray = filter.Values.SimpleValue; for (index = 0; index < simpleValueArray.Length; ++index) { SimpleValue simpleValue = simpleValueArray[index]; yield return(new KeyValuePair <string, Expression <Func <FindDocument, Filter> > >(FindProviderExtensions.EncodeFacetName(field.Name, simpleValue.key), UntypedFilterBuilder.GetMatchFilter(field, simpleValue.value))); } simpleValueArray = (SimpleValue[])null; } if (FindProviderExtensions.IsRangeFacet(filter) && config.TryGetField(filter.field, locale, out field)) { RangeValue[] rangeValueArray = filter.Values.RangeValue; for (index = 0; index < rangeValueArray.Length; ++index) { RangeValue rangeValue = rangeValueArray[index]; yield return(new KeyValuePair <string, Expression <Func <FindDocument, Filter> > >(FindProviderExtensions.EncodeFacetName(field.Name, rangeValue.key), UntypedFilterBuilder.GetRangeFilter(field, rangeValue.lowerbound, rangeValue.upperbound, rangeValue.lowerboundincluded, rangeValue.upperboundincluded))); } rangeValueArray = (RangeValue[])null; } }
internal static IEnumerable <KeyValuePair <string, Expression <Func <FindDocument, Filter> > > > GetPriceFacets(this ITypeSearch <FindDocument> search, SearchFilter filter, Mediachase.Commerce.Currency currency, MarketId marketId) { IFieldConfiguration <double?> field; if (FindProviderExtensions.IsPriceRangeFacet(filter) && search.Client.GetConfiguration().TryGetPriceField(filter.field, currency, marketId, out field)) { foreach (PriceRangeValue priceRangeValue in ((IEnumerable <PriceRangeValue>)filter.Values.PriceRangeValue).Where <PriceRangeValue>((Func <PriceRangeValue, bool>)(prv => string.Equals(prv.currency, (string)currency, StringComparison.OrdinalIgnoreCase)))) { yield return(new KeyValuePair <string, Expression <Func <FindDocument, Filter> > >(FindProviderExtensions.EncodeFacetName(field.Name, priceRangeValue.key), UntypedFilterBuilder.GetRangeFilter((IFieldConfiguration)field, priceRangeValue.lowerbound, priceRangeValue.upperbound, priceRangeValue.lowerboundincluded, priceRangeValue.upperboundincluded))); } } }
/// <summary> /// Adds a filter to the specified search requiring that the specified field is in the specified range. /// </summary> /// <param name="search">The search to modify.</param> /// <param name="field">The field to filter on.</param> /// <param name="from">The value for the lower end of the range, represented as a string in the invariant culture.</param> /// <param name="to">The value for the upper end of the range, represented as a string in the invariant culture.</param> /// <param name="includeFrom">If true, the lower endpoint is included; otherwise, it is excluded.</param> /// <param name="includeTo">If true, the upper endpoint is included; otherwise, it is excluded.</param> /// <returns>The search, modified to include the requested filter.</returns> public static ITypeSearch <FindDocument> FilterFieldRange(this ITypeSearch <FindDocument> search, IFieldConfiguration field, string from, string to, bool includeFrom, bool includeTo) { Expression <Func <FindDocument, Filter> > rangeFilter = UntypedFilterBuilder.GetRangeFilter(field, from, to, includeFrom, includeTo); return(search.Filter <FindDocument>(rangeFilter)); }