public override bool IsMatch(JToken t) { var pathResult = JPath.Evaluate(Path, t, false); foreach (var r in pathResult) { var v = r as JValue; switch (Operator) { case QueryOperator.Equals: if (v != null && v.Equals(Value)) { return(true); } break; case QueryOperator.NotEquals: if (v != null && !v.Equals(Value)) { return(true); } break; case QueryOperator.GreaterThan: if (v != null && v.CompareTo(Value) > 0) { return(true); } break; case QueryOperator.GreaterThanOrEquals: if (v != null && v.CompareTo(Value) >= 0) { return(true); } break; case QueryOperator.LessThan: if (v != null && v.CompareTo(Value) < 0) { return(true); } break; case QueryOperator.LessThanOrEquals: if (v != null && v.CompareTo(Value) <= 0) { return(true); } break; case QueryOperator.Exists: return(true); default: throw new ArgumentOutOfRangeException(); } } return(false); }