2012-01-17 52 views
38

Tôi có các lớp:Automapper Danh sách copy vào danh sách

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 ;} 
} 

tôi định nghĩa này:

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

Đó là việc cho điều này:

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

tôi muốn làm cùng nhưng đối với List<Person> to List<PersonView> nhưng tôi không tìm thấy cú pháp đúng.

Cảm ơn

Trả lời

70

Khi bạn đã tạo bản đồ (mà bạn đã làm, bạn không cần phải lặp lại cho Lists), đó là dễ dàng như:

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

Bạn có thể đọc nhiều hơn trong số AutoMapper documentation for Lists and Arrays.

+0

Điều thú vị cần lưu ý ở đây là mẫu nguồn có thể là loại chung nhất, như 'PersonView []' và đầu ra có thể thuộc bất kỳ loại được hỗ trợ nào khác như 'IEnumerable, ICollection, IList, v.v. – Alex

2

Bạn cũng có thể thử như thế này:

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

nơi

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

Đối AutoMapper 6 < nó sẽ là:

Trong StartUp:

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

Sau đó sử dụng nó như thế này:

List<PersonView> personViews = Mapper.Map<List<PersonView>>(people); 
Các vấn đề liên quan