public IEnumerable <KeyValuePair <string, string> > Build(OdataQueryOptions <TModel> options) { if (options.WhereExpressions.Any()) { var filter = string.Join(" and ", options.WhereExpressions .Select(x => LambdaFilterParser.Parse(x)) .Where(x => !string.IsNullOrEmpty(x)) ); yield return(new KeyValuePair <string, string>("$filter", filter)); } if (options.OrderOptions.Any()) { var orders = options.OrderOptions.Select(x => $"{(string.Join("/", ExpressionHelpers.GetMemberName(x.Expression)))} {x.OrderDirection.ToString().ToLowerInvariant()}"); yield return(new KeyValuePair <string, string>("$orderby", string.Join(",", orders))); } if (options.Skip.HasValue) { yield return(new KeyValuePair <string, string>("$skip", options.Skip.Value.ToString())); } if (options.Take.HasValue) { yield return(new KeyValuePair <string, string>("$top", options.Take.Value.ToString())); } if (options.Take.HasValue || options.Skip.HasValue) { yield return(new KeyValuePair <string, string>("$count", "true")); } if (options.CustomQueryParamsFactory != null) { var custom = options.CustomQueryParamsFactory(); foreach (var kv in custom) { yield return(kv); } } }
public OdataClient(HttpClient client, string apiUri, OdataQueryOptions <TModel, TResult> queryOptions = null) : base(client, apiUri, queryOptions) { QueryOptions = queryOptions; }