Ошибка регистрации поиска по страницам

#c# #asp.net-mvc

#c# #asp.net-mvc

Вопрос:

Сейчас я немного пытаюсь выяснить, как успешно определить, был ли мой поиск успешным в своем поиске или он потерпел неудачу. Я должен регистрироваться, когда поиск завершается неудачно, иначе когда он ничего не находит внутри списка. Я предполагаю, что это как-то связано с решением try / catch. Извините, если это чрезвычайно глупый вопрос, но я искал вокруг и, похоже, не могу найти способ найти способ, если поиск возвращается без данных. Приведенный ниже код — это код, который я использую для поиска по всему списку страниц.

 public async Task<IActionResult> Index(string sortorder, int pageNumber = 1, string searchString = "", string searchString2 = "", string searchString3 = "")
        {
            var game = from g in _context.Cheats
                           select g;

            ViewData["PlatformSortParam"] = String.IsNullOrEmpty(sortorder) ? "platform_sort" : "";//default sort
            ViewData["CurrentFilter"] = searchString;
            ViewData["CurrentFilter2"] = searchString2;
            ViewData["CurrentFilter3"] = searchString3;


            if (!String.IsNullOrEmpty(searchString))
            {
                game = game.Where(b => b.Game.Contains(searchString));

                try
                {

                }
                catch(Exception ex)
                {

                }

                _logger.Log(LogLevel.Warning, (EventId)404, "Search string failed while trying to search for {searchString}", searchString);
            }

            if (!String.IsNullOrEmpty(searchString2))
            {
                game = game.Where(b => b.CheatName.Contains(searchString2));
            }

            if (!String.IsNullOrEmpty(searchString3))
            {
                game = game.Where(b => b.Platform.Contains(searchString3));
            }

            return View(await PaginatedList<Cheats>.CreateAsync(game, pageNumber, 10));


            //return View(await PaginatedList<Cheats>.CreateAsync(_context.Cheats, pageNumber, 10));
        }
 

Это код класса PaginatedList.

 public class PaginatedList<T> : List<T>
    {
        public int PageIndex { get; private set; }
        public int TotalPages { get; set; }
        public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
        {
            PageIndex = pageIndex;
            TotalPages = (int)Math.Ceiling(count / (double)pageSize);
            this.AddRange(items);
        }
        public bool PreviousPage
        {
            get
            {
                return (PageIndex > 1);
            }
        }

        public bool NextPage
        {
            get
            {
                return (PageIndex < TotalPages);
            }
        }

        public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
        {
            var count = await source.CountAsync();
            var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
            return new PaginatedList<T>(items, count, pageIndex, pageSize);
        }
    }
 

Комментарии:

1. Опубликованный код на самом деле не имеет большого смысла — этот блок try / catch пуст, и ваше действие в журнале происходит до того, как вы что-либо сделаете. Вы пытаетесь определить, является ли результат PaginatedList пустой коллекцией или чем-то еще?

2. Да, я пытаюсь выяснить, является ли список страниц пустой коллекцией. Если он пуст, тогда журнал будет запущен и скажет, что это ошибка.

Ответ №1:

Я использовал для его регистрации. Не уверен, как использовать try / catch с этим, но это работает для моего решения.

 if (game.Count() == 0)
                {
                    _logger.Log(LogLevel.Warning, (EventId)404, "Search string failed while trying to search for {searchString}", searchString);
                }