public static bool IsNodeOrGroupedParentNegated(this IFieldQueryNode node)
        {
            if (!String.IsNullOrEmpty(node.Prefix))
            {
                return(node.IsNodeNegated());
            }

            IQueryNode current = node;

            do
            {
                var groupNode = current as GroupNode;
                if (groupNode != null && !groupNode.HasParens)
                {
                    current = current.Parent;
                    continue;
                }

                var fieldQueryNode = current as IFieldQueryNode;
                if (fieldQueryNode != null &&
                    ((fieldQueryNode.IsNegated.HasValue && fieldQueryNode.IsNegated.Value == true) ||
                     (!String.IsNullOrEmpty(fieldQueryNode.Prefix) && fieldQueryNode.Prefix == "-")))
                {
                    return(true);
                }

                current = current.Parent;
            } while (current.Parent != null);

            return(false);
        }