using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using UserManagement.Data; using UserManagement.Data.Dto; namespace UserManagement.Repository { public class UserList : List { public UserList() { } public int Skip { get; private set; } public int TotalPages { get; private set; } public int PageSize { get; private set; } public int TotalCount { get; private set; } public UserList(List items, int count, int skip, int pageSize) { TotalCount = count; PageSize = pageSize; Skip = skip; TotalPages = (int)Math.Ceiling(count / (double)pageSize); AddRange(items); } public async Task Create(IQueryable source, int skip, int pageSize) { var count = await GetCount(source); var dtoList = await GetDtos(source, skip, pageSize); var dtoPageList = new UserList(dtoList, count, skip, pageSize); return dtoPageList; } public async Task GetCount(IQueryable source) { return await source.AsNoTracking().CountAsync(); } public async Task> GetDtos(IQueryable source, int skip, int pageSize) { var entities = await source .Skip(skip) .Take(pageSize) .AsNoTracking() .Select(c => new UserDto { Id = c.Id, Email = c.Email, FirstName = c.FirstName, LastName = c.LastName, PhoneNumber = c.PhoneNumber, IsActive = c.IsActive, }) .ToListAsync(); return entities; } } }