/// <summary>
        /// Retrieves up to the specified number of documents from this document library.
        /// </summary>
        /// <param name="limit">The maximum number of documents to return.</param>
        /// <returns>A collection of <see cref="SharePointDocument" /> objects.</returns>
        public SharePointDocumentCollection Retrieve(int limit)
        {
            SharePointDocumentQuery query = new SharePointDocumentQuery
            {
                DocumentLimit = limit
            };

            return(Retrieve(query));
        }
        /// <summary>
        /// Retrieves documents from this document library using the specified <see cref="SharePointDocumentQuery" />.
        /// </summary>
        /// <param name="query">A <see cref="SharePointDocumentQuery" /> object containing query parameters.</param>
        /// <returns>A collection of <see cref="SharePointDocument" /> objects.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="query" /> is null.</exception>
        public SharePointDocumentCollection Retrieve(SharePointDocumentQuery query)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            LogDebug($"Retrieving documents from {Name} library at {ToString()}");

            // Declare this outside the context so we can close the connection as soon as we are done
            ListItemCollection listItems;

            using (ClientContext context = new ClientContext(SiteUrl))
            {
                context.Credentials = Credential;
                List list = context.Web.Lists.GetByTitle(Name);
                listItems = list.GetItems(query.GenerateCamlQuery());
                context.Load(listItems);
                context.ExecuteQuery();
            }

            return(new SharePointDocumentCollection(listItems));
        }