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 NLogList : List { public NLogList() { } 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 NLogList(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 NLogList(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 NLogDto { Id = c.Id, Logged = c.Logged, Level = c.Level, Message = c.Message, Logger = c.Logger, Properties = c.Properties, Callsite = c.Callsite, Exception = c.Exception, Source = c.Source }) .ToListAsync(); return entities; } } }