<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />

CompositeExpression

using System; using System.Collections.Generic; namespace Newtonsoft.Json.Linq.JsonPath { internal class CompositeExpression : QueryExpression { public List<QueryExpression> Expressions { get; set; } public CompositeExpression() { Expressions = new List<QueryExpression>(); } public override bool IsMatch(JToken root, JToken t) { List<QueryExpression>.Enumerator enumerator; switch (base.Operator) { case QueryOperator.And: enumerator = Expressions.GetEnumerator(); try { while (enumerator.MoveNext()) { if (!enumerator.Current.IsMatch(root, t)) return false; } } finally { ((IDisposable)enumerator).Dispose(); } return true; case QueryOperator.Or: enumerator = Expressions.GetEnumerator(); try { while (enumerator.MoveNext()) { if (enumerator.Current.IsMatch(root, t)) return true; } } finally { ((IDisposable)enumerator).Dispose(); } return false; default: throw new ArgumentOutOfRangeException(); } } } }