Automapper映射自定义集合 [英] Automapper map custom collections

查看:185
本文介绍了Automapper映射自定义集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好.我有一个看起来像这样的列表:

Hello. I have a list that looks like this one:

public class PagedList<T> : List<T>
{
    public PagedList(IEnumerable<T> collection) : base(collection)
    { }
    public int TotalItems { get; set; }
    public int CurrentPage { get; set; }
    public int PageSize { get; set; }
    //some other properties
}

并在存储库中用于分页

 public PagedList<TEntity> GetPaged(int page)
 {
   var pagedEntities = some_query;
   return pagedEntities.AsPagedList(totalResults, page, pageSize);
 }

在ASP MVC视图模型中也使用相同的PagedList进行分页. 是否可以使用具有所有属性TotalItems/CurrentPage/...的Automapper映射此集合?

The same PagedList is also used in asp mvc view models for paging. Is it possible to map this collections using Automapper with all the properties TotalItems/CurrentPage/... ?

   PagedList<DbItem> dbItems = _repository.GetPages(page);
   var viewItems = new PagedList<SomeItemView>();
   Mapper.Map(dbItems , viewItems);

谢谢你!

推荐答案

这对我有用.您是否在寻找更通用的东西?

This worked for me. Are you looking for something more generic?

public class DbItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ViewItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}

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

class Program
{
    static void Main(string[] args)
    {
        MapItems();
    }

    public static void MapItems()
    {
        Mapper.CreateMap<DbItem, ViewItem>();
        Mapper.CreateMap<PagedList<DbItem>, PagedList<ViewItem>>()
            .AfterMap((s, d) => Mapper.Map<List<DbItem>, List<ViewItem>>(s, d));

        var dbList = new PagedList<DbItem>
                         {
                             new DbItem {Id = 1, Name = "a"}, 
                             new DbItem {Id = 2, Name = "b"}
                         };
        dbList.TotalItems = 2;
        dbList.CurrentPage = 1;
        dbList.PageSize = 10;
        var viewList = Mapper.Map<PagedList<DbItem>, PagedList<ViewItem>>(dbList);

        Console.WriteLine(viewList.TotalItems);
        Console.WriteLine(viewList.CurrentPage);
        Console.WriteLine(viewList.PageSize);
        Console.WriteLine(viewList[0].Id + " " + viewList[0].Name);
        Console.WriteLine(viewList[1].Id + " " + viewList[1].Name);
        Console.ReadLine();
    }
}

这篇关于Automapper映射自定义集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆