1

I had automapper working but then added in the PagedList and now it does not work. How do I tell it just to map the RfReport to RfReportModel but keep the PagedList parameters?

AutoMapper.AutoMapperMappingException: 'Error mapping types.' ArgumentException: PWDRS.Core.Helpers.PagedList`1[PWDRS.Application.Models.RfReportModel] needs to have a constructor with 0 args or only optional args.

  public PagedList<RfReportModel> GetRfReportListPaged(RfReportParameters rfReportParameters)
    {
        PagedList<RfReport> rfReports = _rfReportRepository.GetRfReportListPaged(rfReportParameters);
        PagedList<RfReportModel> mapped = _mapper.Map<PagedList<RfReportModel>>(rfReports);
        return mapped;
    }


  public class PagedList<T> : List<T>
    {
        public int CurrentPage { get; private set; }
        public int TotalPages { get; private set; }
        public int PageSize { get; private set; }
        public int TotalCount { get; private set; }

        public bool HasPrevious => CurrentPage > 1;
        public bool HasNext => CurrentPage < TotalPages;

        public PagedList(List<T> items, int count, int pageNumber, int pageSize)
        {
            TotalCount = count;
            PageSize = pageSize;
            CurrentPage = pageNumber;
            TotalPages = (int)Math.Ceiling(count / (double)pageSize);

            AddRange(items);
        }

        public static PagedList<T> ToPagedList(IEnumerable<T> source, int pageNumber, int pageSize)
        {
            var count = source.Count();
            var items = source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();

            return new PagedList<T>(items, count, pageNumber, pageSize);
        }
    }

EDIT 1: I could not figure out how to do it in automapper but I realized I could recreate the PagedList easily like this to effectively do the same thing.

 public PagedList<RfReportModel> GetRfReportListPaged(RfReportParameters rfReportParameters)
    {
        PagedList<RfReport> rfReports = _rfReportRepository.GetRfReportListPaged(rfReportParameters);
        IEnumerable<RfReportModel> mapped = _mapper.Map<IEnumerable<RfReportModel>>(rfReports);

        PagedList<RfReportModel> plMapped = PagedList<RfReportModel>.ToPagedList(
         mapped,
         rfReportParameters.PageNumber,
         rfReportParameters.PageSize);

        return plMapped;
    }
punkouter
  • 5,170
  • 15
  • 71
  • 116
  • 1
    https://stackoverflow.com/questions/58980561/automapper-with-inherited-list#comment104231389_58980561 – Lucian Bargaoanu Nov 27 '19 at 18:49
  • 1
    Does this answer your question? [AutoMapper Custom Type Converter not working](https://stackoverflow.com/questions/12470156/automapper-custom-type-converter-not-working) – Eldar Nov 27 '19 at 19:25

0 Answers0