public void Where(Expression <Func <TSource, bool> > predicate) { MethodCallExpression whereExpression = predicate.WrapInWhereExpression(); var jsonSelector = _queryProvider.ToString(whereExpression); _partialSelector = jsonSelector .Substring(1, jsonSelector.Length - 2) .Replace("selector", "partial_filter_selector", StringComparison.CurrentCultureIgnoreCase); }
public static async Task <ChangesFeedResponse <TSource> > QueryWithFilterAsync <TSource>(this IFlurlRequest request, IAsyncQueryProvider queryProvider, ChangesFeedFilter filter, CancellationToken cancellationToken) where TSource : CouchDocument { if (filter is DocumentIdsChangesFeedFilter documentIdsFilter) { return(await request .SetQueryParam("filter", "_doc_ids") .PostJsonAsync(new ChangesFeedFilterDocuments(documentIdsFilter.Value), cancellationToken) .ReceiveJson <ChangesFeedResponse <TSource> >() .ConfigureAwait(false)); } if (filter is SelectorChangesFeedFilter <TSource> selectorFilter) { MethodCallExpression whereExpression = selectorFilter.Value.WrapInWhereExpression(); var jsonSelector = queryProvider.ToString(whereExpression); return(await request .WithHeader("Content-Type", "application/json") .SetQueryParam("filter", "_selector") .PostStringAsync(jsonSelector, cancellationToken) .ReceiveJson <ChangesFeedResponse <TSource> >() .ConfigureAwait(false)); } if (filter is DesignChangesFeedFilter) { return(await request .SetQueryParam("filter", "_design") .GetJsonAsync <ChangesFeedResponse <TSource> >(cancellationToken) .ConfigureAwait(false)); } if (filter is ViewChangesFeedFilter viewFilter) { return(await request .SetQueryParam("filter", "_view") .SetQueryParam("view", viewFilter.Value) .GetJsonAsync <ChangesFeedResponse <TSource> >(cancellationToken) .ConfigureAwait(false)); } throw new InvalidOperationException($"Filter of type {filter.GetType().Name} not supported."); }
public override string ToString() { return(_queryProvider.ToString(_expression)); }