/// <summary> /// Translates an OData $filter represented by <see cref="FilterClause"/> to <see cref="Expression"/> and apply to <see cref="IQueryable" />. /// </summary> /// <param name="binder">The given filter binder.</param> /// <param name="query">The given queryable.</param> /// <param name="filterClause">The filter clause.</param> /// <param name="context">The query binder context.</param> /// <returns>The applied result.</returns> public static IQueryable ApplyBind(this IFilterBinder binder, IQueryable query, FilterClause filterClause, QueryBinderContext context) { if (binder == null) { throw Error.ArgumentNull(nameof(binder)); } if (query == null) { throw Error.ArgumentNull(nameof(query)); } if (filterClause == null) { throw Error.ArgumentNull(nameof(filterClause)); } if (context == null) { throw Error.ArgumentNull(nameof(context)); } Expression filterExp = binder.BindFilter(filterClause, context); return(ExpressionHelpers.Where(query, filterExp, context.ElementClrType)); }
/// <summary> /// Translate an OData $search parse tree represented by <see cref="SearchClause"/> to /// an <see cref="Expression"/> and applies it to an <see cref="IQueryable"/>. /// </summary> /// <param name="binder">The built in <see cref="ISelectExpandBinder"/></param> /// <param name="source">The original <see cref="IQueryable"/>.</param> /// <param name="searchClause">The OData $search parse tree.</param> /// <param name="context">An instance of the <see cref="QueryBinderContext"/>.</param> /// <returns>The applied result.</returns> public static IQueryable ApplyBind(this ISearchBinder binder, IQueryable source, SearchClause searchClause, QueryBinderContext context) { if (binder == null) { throw Error.ArgumentNull(nameof(binder)); } if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (searchClause == null) { throw Error.ArgumentNull(nameof(searchClause)); } if (context == null) { throw Error.ArgumentNull(nameof(context)); } Expression searchExp = binder.BindSearch(searchClause, context); return(ExpressionHelpers.Where(source, searchExp, context.ElementClrType)); }