public static async Task <PaginatedList <T> > CreateAsync(IOrderedQueryable <T> source, FilterGas filter) { //кількість елементів int count = await source.CountAsync(); filter.TotalPages = (int)Math.Ceiling(count / (double)filter.PageSize); //якщо поле "поточна сторінка" більше ніж кількість сторінок після зміни фільтру: while (filter.PageIndex > filter.TotalPages) { filter.PageIndex--; } //вибірка потрібної сторінки items = await source.Skip((filter.PageIndex - 1) *filter.PageSize).Take(filter.PageSize).ToListAsync(); return(new PaginatedList <T>(count, filter)); }
//приватний конструктор (не може бути асинхронним) PaginatedList(int count, FilterGas filter) { FilterInPL = filter; this.AddRange(items); }