Пример #1
0
        public void ExecuteSearch()
        {
            if (PageNumber < 1)
            {
                PageNumber = 1;
            }
            else if (PageNumber > MaxPageCount)
            {
                PageNumber = MaxPageCount;
            }

            var maxResults = MaxPageCount * DefaultResultsPerPage;

            var headers = NoteStorage.SearchInPeriod(
                // ReSharper disable once RedundantArgumentDefaultValue
                PeriodStart, PeriodEnd, Query, maxResults + 1, SearchableDocumentTime.LastUpdate);

            if (_deletedNote != null)
            {
                headers.Remove(_deletedNote);
            }
            else if (headers.Any() && headers.Count > maxResults)
            {
                headers.RemoveAt(headers.Count - 1);
            }

            TotalPageCount = (int)Math.Ceiling((double)headers.Count / DefaultResultsPerPage);

            var headersPage = headers
                              .Skip((PageNumber - 1) * DefaultResultsPerPage)
                              .Take(DefaultResultsPerPage)
                              .ToList();

            SearchResultPage = headersPage
                               .Select(h => NoteStorage.GetExisting(h.Id))
                               .Where(x => x != null)
                               .ToList();

            if (headersPage.Count > SearchResultPage.Count)
            {
                Log.Warn("Fulltext index out of sync: rebuild it");
            }
        }