Esempio n. 1
0
        private static IEnumerable <JToken> GetItemsByMark(QueryFilterModel model,
                                                           ImmutableList <JToken> orderedTokens, int ii)
        {
            var res = model.ComparisonMark switch
            {
                ">=" => orderedTokens.GetRange(ii, orderedTokens.Count - ii),
                "<=" => orderedTokens.GetRange(ii, orderedTokens.Count - ii),
                ">" => orderedTokens.GetRange(ii + 1, orderedTokens.Count - ii - 1),
                "<" => orderedTokens.GetRange(ii + 1, orderedTokens.Count - ii - 1),
                _ => Enumerable.Empty <JToken>()
            };

            return(new JObject(res).ToObject <JToken>());
        }
    }
Esempio n. 2
0
        private JToken GetToken(JToken source, QueryFilterModel model)
        {
            if (model.ComparisonMark.Equals("=="))
            {
                return(source.Children()
                       .FirstOrDefault(x => x.Path.EndsWith(model.Value, true, null)));
            }

            var orderedTokens = model.ComparisonMark.Contains("<")
                ? source.OrderByDescending(x => x.Path).ToImmutableList()
                : source.OrderBy(x => x.Path).ToImmutableList();

            var tokenIndex = GetTokenIndex(model, orderedTokens);
            var result     = GetItemsByMark(model, orderedTokens, tokenIndex);

            return(JToken.FromObject(result));
        }
Esempio n. 3
0
 private static string BuildEqualsFilter(QueryFilterModel model) =>
 $@"[?(@.{model.PropertyName.ToLower()} {model.ComparisonMark} {model.Value})]";
Esempio n. 4
0
        private static int GetTokenIndex(QueryFilterModel model, ImmutableList <JToken> orderedTokens)
        {
            var item = orderedTokens.FirstOrDefault(x => x.Path.EndsWith(model.Value, true, null));

            return(orderedTokens.IndexOf(item));
        }