2012-01-17 74 views
38

我有這些類:Automapper副本列表列出

public class Person { 
    public int Id{ get; set ;} 
    public string FirstName{ get; set ;} 
    public string LastName{ get; set ;} 
} 

public class PersonView { 
    public int Id{ get; set ;} 
    public string FirstName{ get; set ;} 
    public string LastName{ get; set ;} 
} 

我定義的:

Mapper.CreateMap<Person, PersonView>(); 
Mapper.CreateMap<PersonView, Person>() 
    .ForMember(person => person.Id, opt => opt.Ignore()); 

這對這項工作:

PersonView personView = Mapper.Map<Person, PersonView>(new Person()); 

我想做出同樣的但對於List<Person> to List<PersonView>但我沒有找到正確的語法。

感謝

回答

70

一旦你創建的地圖(你已經完成了,你不需要重複的列表),它是那麼容易,因爲:

List<PersonView> personViews = 
    Mapper.Map<List<Person>, List<PersonView>>(people); 

你可以閱讀更多在AutoMapper documentation for Lists and Arrays

+0

有趣這裏要注意的是,源模板可以是最通用的類​​型,如'PersonView []'和輸出可以是任何其他支持的類型,如'的IEnumerable,ICollection的, IList等等 – Alex 2012-02-24 15:37:53

2

您也可以嘗試這樣的:

var personViews = personsList.Select(x=>x.ToModel<PersonView>()); 

其中

public static T ToModel<T>(this Person entity) 
{ 
     Type typeParameterType = typeof(T); 

     if(typeParameterType == typeof(PersonView)) 
     { 
      Mapper.CreateMap<Person, PersonView>(); 
      return Mapper.Map<T>(entity); 
     } 

     return default(T); 
} 
3

對於AutoMapper 6 <這將是:

處於啓動:

Mapper.Initialize(cfg => { 
    cfg.CreateMap<Person, PersonView>(); 
    ... 
}); 

然後使用它像這樣:

List<PersonView> personViews = Mapper.Map<List<PersonView>>(people);