public async Task <ActionResult <GetToDoListItemsResponse> > Get(int?pageSize, int?pageNumber, bool?isCompletedFilter, string descriptionFilter) { try { ToDoListItemFilter filter = new ToDoListItemFilter(isCompletedFilter, descriptionFilter); var items = await repository.GetToDoListItemsAsync(pageSize, pageNumber, filter); GetToDoListItemsResponse result = new GetToDoListItemsResponse { Items = items.Items, PageCount = items.PageCount, PageNumber = pageNumber, PageSize = pageSize }; return(Ok(result)); } catch (Exception ex) { logger.LogError(ex, "An error occured while querying ToDoListItems {0} {1} {2} {3}", pageSize, pageNumber, isCompletedFilter, descriptionFilter); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <GetToDoListItemsResult> GetToDoListItemsAsync(int?pageSize, int?pageNumber, ToDoListItemFilter filter) { GetToDoListItemsResult result = new GetToDoListItemsResult(); IQueryable <ToDoListItem> items = context.ToDoListItems.Where(i => !i.IsDeleted); if (filter != null && filter.IsCompleted.HasValue) { items = items.Where(i => i.IsCompleted == filter.IsCompleted.Value); } if (filter != null && !string.IsNullOrEmpty(filter.Description)) { items = items.Where(i => i.Description.ToLower().Contains(filter.Description.ToLower())); } items = items.OrderBy(i => i.Id); if (pageSize.HasValue && pageNumber.HasValue) { int totalRowNumber = await items.CountAsync(); result.PageCount = (int)Math.Ceiling((decimal)totalRowNumber / pageSize.Value); items = items.Skip(pageSize.Value * pageNumber.Value).Take(pageSize.Value); } else { result.PageCount = 1; } result.Items = await items.ToArrayAsync(); return(result); }