public static NestedFilter BuildNestedFilter(DataModel.Search.Sort.NestedFilter nestedFilter)
 {
     NestedFilter.Builder builder = NestedFilter.CreateBuilder();
     builder.SetPath(nestedFilter.Path);
     builder.SetFilter(SearchQueryBuilder.BuildQuery(nestedFilter.Query));
     return(builder.Build());
 }
Beispiel #2
0
        public static ITypeSearch <TSource> Filter <TSource, TListItem>(this ITypeSearch <TSource> search,
                                                                        Expression <Func <TSource, NestedList <TListItem> > > nestedExpression,
                                                                        Expression <Func <TListItem, Filter> > filterExpression)
        {
            search.ValidateNotNullArgument("search");
            nestedExpression.ValidateNotNullArgument("nestedExpression");
            filterExpression.ValidateNotNullArgument("filterExpression");

            var path = search.Client.Conventions.FieldNameConvention.GetFieldName(nestedExpression);

            if (!path.EndsWith("$$nested"))
            {
                throw new ArgumentException(string.Format("{0} is not a nested object.", nestedExpression.GetReturnType().Name));
            }
            var parser = new FilterExpressionParser(search.Client.Conventions);
            var filter = parser.GetFilter(filterExpression);

            PrependPathOnNestedFilters(path, filter);
            var nestedFilter = new NestedFilter(path, filter);

            return(search.Filter(nestedFilter));
        }