コード例 #1
0
        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);
        }