private void ApplyAlias(IFieldQueryNode node, IQueryVisitorContext context)
        {
            if (node.Parent == null)
            {
                return;
            }

            var resolver = node.Parent.GetAliasResolver(context);
            var result   = resolver != null && node.Field != null?resolver(node.Field) : null;

            if (result == null)
            {
                var groupNode = node as GroupNode;
                if (groupNode != null)
                {
                    node.SetAliasResolver(_useNestedResolvers ? GetScopedResolver(resolver, node.Field) : resolver);
                }

                return;
            }

            node.SetOriginalField(node.Field);
            node.Field = result.Name;
            if (node is GroupNode)
            {
                node.SetAliasResolver(_useNestedResolvers ? result.Resolver : resolver);
            }
        }
        private void ResolveField(IFieldQueryNode node, IQueryVisitorContext context)
        {
            if (node.Parent == null || node.Field == null)
            {
                return;
            }

            var contextResolver = context.GetFieldResolver();

            string resolvedField = node.Field;

            if (_globalResolver != null)
            {
                resolvedField = _globalResolver(resolvedField) ?? resolvedField;
            }
            if (contextResolver != null)
            {
                resolvedField = contextResolver(resolvedField) ?? resolvedField;
            }

            if (resolvedField != null && !resolvedField.Equals(node.Field, StringComparison.OrdinalIgnoreCase))
            {
                node.SetOriginalField(node.Field);
                node.Field = resolvedField;
            }
        }