/// <summary>
        /// Gets a list of a users photos which are not in a set.
        /// </summary>
        /// <param name="perPage">Number of photos per page.</param>
        /// <param name="page">The page number to return.</param>
        /// <param name="extras"><see cref="PhotoSearchExtras"/> enumeration.</param>
        /// <returns><see cref="PhotoCollection"/> instance containing list of photos.</returns>
        public PhotoCollection PhotosGetNotInSet(int page, int perPage, PhotoSearchExtras extras)
        {
            var options = new PartialSearchOptions();

            options.PerPage = perPage;
            options.Page    = page;
            options.Extras  = extras;

            return(PhotosGetNotInSet(options));
        }
        /// <summary>
        /// Returns a list of your photos with no tags.
        /// </summary>
        /// <param name="extras">A comma-delimited list of extra information to fetch for each returned record.</param>
        /// <param name="page">The page of results to return. If this argument is omitted, it defaults to 1.</param>
        /// <param name="perPage">Number of photos to return per page. If this argument is omitted, it defaults to 100. The maximum allowed value is 500.</param>
        /// <returns>A <see cref="PhotoCollection"/> class containing the list of photos.</returns>
        public PhotoCollection PhotosGetUntagged(int page, int perPage, PhotoSearchExtras extras)
        {
            var o = new PartialSearchOptions();

            o.Page    = page;
            o.PerPage = perPage;
            o.Extras  = extras;

            return(PhotosGetUntagged(o));
        }
        /// <summary>
        /// Gets a list of the authenticated users photos which are not in a set.
        /// </summary>
        /// <param name="options">A selection of options to filter/sort by.</param>
        /// <returns>A collection of photos in the <see cref="PhotoCollection"/> class.</returns>
        public PhotoCollection PhotosGetNotInSet(PartialSearchOptions options)
        {
            CheckRequiresAuthentication();

            var parameters = new Dictionary <string, string>();

            parameters.Add("method", "flickr.photos.getNotInSet");
            UtilityMethods.PartialOptionsIntoArray(options, parameters);

            return(GetResponseCache <PhotoCollection>(parameters));
        }
        /// <summary>
        /// Adds the partial options to the passed in <see cref="Hashtable"/>.
        /// </summary>
        /// <param name="options">The options to convert to an array.</param>
        /// <param name="parameters">The <see cref="Hashtable"/> to add the option key value pairs to.</param>
        public static void PartialOptionsIntoArray(PartialSearchOptions options, Dictionary <string, string> parameters)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (options.MinUploadDate != DateTime.MinValue)
            {
                parameters.Add("min_uploaded_date", UtilityMethods.DateToUnixTimestamp(options.MinUploadDate).ToString());
            }
            if (options.MaxUploadDate != DateTime.MinValue)
            {
                parameters.Add("max_uploaded_date", UtilityMethods.DateToUnixTimestamp(options.MaxUploadDate).ToString());
            }
            if (options.MinTakenDate != DateTime.MinValue)
            {
                parameters.Add("min_taken_date", DateToMySql(options.MinTakenDate));
            }
            if (options.MaxTakenDate != DateTime.MinValue)
            {
                parameters.Add("max_taken_date", DateToMySql(options.MaxTakenDate));
            }
            if (options.Extras != PhotoSearchExtras.None)
            {
                parameters.Add("extras", options.ExtrasString);
            }
            if (options.SortOrder != PhotoSearchSortOrder.None)
            {
                parameters.Add("sort", options.SortOrderString);
            }
            if (options.PerPage > 0)
            {
                parameters.Add("per_page", options.PerPage.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
            }
            if (options.Page > 0)
            {
                parameters.Add("page", options.Page.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
            }
            if (options.PrivacyFilter != PrivacyFilter.None)
            {
                parameters.Add("privacy_filter", options.PrivacyFilter.ToString("d"));
            }
        }