public static async Task <CatalogViewModel> CreateAsync(ViewFilter <ProductItem> viewFilter, IQueryable <ProductItem> source, int pageIndex, string sortOrder) { double max = default; PaginatedList <ProductItem> paginateProductItems = default; if (source != null && source.Any()) { max = await source.MaxAsync(p => p.Price); var filteredSource = viewFilter.Filter(source); var sortedSource = SortOrder <ProductItem> .Create(filteredSource, sortOrder); paginateProductItems = await PaginatedList <ProductItem> .CreateAsync(sortedSource, pageIndex, pageSize); } return(new CatalogViewModel(viewFilter, source, paginateProductItems, max)); }