using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UserManagement.Data; using UserManagement.Data.Dto; namespace UserManagement.Repository { public class NotificationList : List { public NotificationList() { } 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 NotificationList(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 NotificationList(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 UserNotificationDto { Id = c.Id, CreatedDate = c.CreatedDate, IsRead = c.IsRead, Message = c.Message, UserId = c.UserId, NotificationsType = c.NotificationsType }) .ToListAsync(); return entities; } } }