private bool MatchTokens(JsonElement leftResult, JsonElement rightResult) { if (leftResult.IsValue() && rightResult.IsValue()) { switch (Operator) { case QueryOperator.RegexEquals: if (RegexEquals(leftResult, rightResult)) { return(true); } break; case QueryOperator.Equals: if (EqualsWithStringCoercion(leftResult, rightResult)) { return(true); } break; case QueryOperator.StrictEquals: if (EqualsWithStrictMatch(leftResult, rightResult)) { return(true); } break; case QueryOperator.NotEquals: if (!EqualsWithStringCoercion(leftResult, rightResult)) { return(true); } break; case QueryOperator.StrictNotEquals: if (!EqualsWithStrictMatch(leftResult, rightResult)) { return(true); } break; case QueryOperator.GreaterThan: if (leftResult.CompareTo(rightResult) > 0) { return(true); } break; case QueryOperator.GreaterThanOrEquals: if (leftResult.CompareTo(rightResult) >= 0) { return(true); } break; case QueryOperator.LessThan: if (leftResult.CompareTo(rightResult) < 0) { return(true); } break; case QueryOperator.LessThanOrEquals: if (leftResult.CompareTo(rightResult) <= 0) { return(true); } break; case QueryOperator.Exists: return(true); } } else { switch (Operator) { case QueryOperator.Exists: // you can only specify primitive types in a comparison // notequals will always be true case QueryOperator.NotEquals: return(true); } } return(false); }