private static void ValidateFields(GraphQueryField field, IList <GraphQueryField> fields, Type expectedFieldType)
        {
            if (fields == null || !fields.Any())
            {
                throw new GraphQueryFieldInvalidException($"Query field '{field.FieldName}' requires at least one query field.");
            }

            if (fields.Any(x => x.ParentClassType != expectedFieldType))
            {
                throw new GraphQueryFieldInvalidException($"The following fields are not valid fields for '{field.FieldName}' {fields.Where(x => x.ParentClassType != field.ChildFieldParentType).Select(x => x.FieldName).Aggregate((x, y) => $"{x}, {y}")}.");
            }
        }
        private static void ValidateArguments(GraphQueryField field, IList <object> arguments, Type expectedArgumentType)
        {
            if (arguments != null)
            {
                if (arguments.Any(x => (Type)x.GetType().GetProperty("ParentClassType").GetValue(x) != expectedArgumentType))
                {
                    throw new GraphQueryArgumentInvalidException($@"The following fields are not valid query arguments for the field '{field.FieldName}': {
                        arguments
                            .Where(x => (Type)x.GetType().GetProperty("ParentClassType").GetValue(x) != expectedArgumentType)
                            .Select(x => nameof(x))
                            .Aggregate((x, y) => $"{x}, {y}")}.");
                }

                foreach (var argument in arguments)
                {
                    argument.IsValidArgumentType();
                }
            }
        }
 public static void ValidateQueryFields(GraphQueryField field, IList <GraphQueryField> fields, Type expectedFieldType)
 {
     ValidateFields(field, fields, expectedFieldType);
 }
 public static void ValidateQueryFieldsAndArguments(GraphQueryField field, IList <GraphQueryField> fields, IList <object> arguments, Type expectedFieldType, Type expectedArgumentType)
 {
     ValidateFields(field, fields, expectedFieldType);
     ValidateArguments(field, arguments, expectedArgumentType);
 }