/// <summary>
        /// Extracts the filter definition once a leaf is found.
        /// </summary>
        /// <param name="info">QueryInformation being filled.</param>
        /// <param name="binaryNode">BinaryOperatorNode the leaf belongs to.</param>
        /// <param name="constantNode">ConstantNode with the parameter definition.</param>
        private void ProcessLeafNode(QueryInformation info, BinaryOperatorNode binaryNode, ConstantNode constantNode)
        {
            try
            {
                // Necesary variables
                SingleValuePropertyAccessNode propertyAccessNode = binaryNode.Left as SingleValuePropertyAccessNode;
                SingleValueFunctionCallNode   functioncall       = binaryNode.Left as SingleValueFunctionCallNode;

                // The filter definition that is going to be added.
                FilterParameterDefinition filterdefinition = new FilterParameterDefinition();

                // Populating common values.
                filterdefinition.FilteringOperator = (FilteringOperator)binaryNode.OperatorKind;
                filterdefinition.StringValue       = constantNode.Value.ToString();


                if (functioncall != null)
                {
                    // it contains a function call
                    propertyAccessNode = ParseFunctionCall(propertyAccessNode, functioncall, filterdefinition);
                }

                if (propertyAccessNode != null)
                {
                    //it is a simple equals
                    ParsePropertyAccessNode(info, propertyAccessNode, filterdefinition);
                }
            }
            catch (Exception ex)
            {
                LogException(ex);
            }
        }
        /// <summary>
        /// Gets the SingleValuePropertyAccessNode from a function call.
        /// </summary>
        /// <param name="propertyAccessNode">Property access node the function call belongs to.</param>
        /// <param name="functioncall">Function call being parsed.</param>
        /// <param name="filterdefinition">Filter definition being filled.</param>
        /// <returns>A SingleValuePropertyAccessNode to be parsed.</returns>
        private static SingleValuePropertyAccessNode ParseFunctionCall(SingleValuePropertyAccessNode propertyAccessNode, SingleValueFunctionCallNode functioncall, FilterParameterDefinition filterdefinition)
        {
            StringBuilder builder = new StringBuilder();

            var argumentEnumerator = functioncall.Arguments.GetEnumerator();

            filterdefinition.Modifiers = functioncall.Name;
            argumentEnumerator.MoveNext();
            propertyAccessNode = argumentEnumerator.Current as SingleValuePropertyAccessNode;
            return(propertyAccessNode);
        }
        /// <summary>
        /// Parses a Property access node.
        /// </summary>
        /// <param name="info">QueryInformation being filled.</param>
        /// <param name="propertyAccessNode">Property access node to be parsed.</param>
        /// <param name="filterdefinition">Filter definition being filled.</param>
        private static void ParsePropertyAccessNode(QueryInformation info, SingleValuePropertyAccessNode propertyAccessNode, FilterParameterDefinition filterdefinition)
        {
            filterdefinition.FieldName = propertyAccessNode.Property.Name;

            info.FilterParameters.Add(filterdefinition);
        }