public IActionResult Index(SortState sortOrder, string searchString) { var contactsDto = db.Contacts .Select(c => c.ToDto()) .ToList() .AsQueryable(); ViewData["SearchString"] = searchString; ViewData["NameSort"] = sortOrder == SortState.NameAscending ? SortState.NameDescending : SortState.NameAscending; ViewData["LastNameSort"] = sortOrder == SortState.LastNameAscending ? SortState.LastNameDescending : SortState.LastNameAscending; ViewData["PhoneNumberSort"] = sortOrder == SortState.PhoneNumberAscending ? SortState.PhoneNumberDescending : SortState.PhoneNumberAscending; contactsDto = sortOrder switch { SortState.NameDescending => contactsDto.OrderByDescending(c => c.Name), SortState.LastNameAscending => contactsDto.OrderBy(c => c.LastName), SortState.LastNameDescending => contactsDto.OrderByDescending(c => c.LastName), SortState.PhoneNumberAscending => contactsDto.OrderBy(c => c.PhoneNumber), SortState.PhoneNumberDescending => contactsDto.OrderByDescending(c => c.PhoneNumber), _ => contactsDto.OrderBy(c => c.Name), }; if (searchString != null) { contactsDto = contactsDto .Select(n => n) .Where(c => (c.Name.Contains(searchString) || c.LastName.Contains(searchString) || c.PhoneNumber.Contains(searchString))); } return(View(contactsDto)); }