using System; using System.Collections.Generic; namespace Newtonsoft.Json.Linq.JsonPath { internal class QueryScanFilter : PathFilter { internal QueryExpression Expression; public QueryScanFilter(QueryExpression expression) { Expression = expression; } public override IEnumerable ExecuteFilter(JToken root, IEnumerable current, JsonSelectSettings? settings) { foreach (JToken t in current) { if (t is JContainer c) { foreach (JToken d in c.DescendantsAndSelf()) { if (Expression.IsMatch(root, d, settings)) { yield return d; } } } else { if (Expression.IsMatch(root, t, settings)) { yield return t; } } } } } }