2011-10-05 29 views
6

Với các thiết lập sau các lớp:Sử dụng Automapper để ánh xạ một tài sản của một bộ sưu tập để một loạt các nguyên thủy

class Parent 
{ 
    string Name { get; set; } 
    List<Child> children { get; set; } 
} 
class Child 
{ 
    short ChildId { get; set; } 
    string Name { get; set; } 
} 

class ParentViewModel 
{ 
     string Name { get; set; } 
     short[] ChildIds { get; set; } 
} 

Khi tôi gọi

Mapper.Map<Parent, ParentViewModel>(vm); 

Có thể để có được AutoMapper để dịch danh sách của Child.ChildId đến ParentViewModel.ChildIds?

Tôi đã cố gắng làm một cái gì đó như thế này:

Mapper.CreateMap<Child, short>() 
    .FromMember(dest => dest, opt => opt.MapFrom(src => src.ChildId)); 
Mapper.CreateMap<Parent, ParentViewModel>() 
    .FromMember(dest => dest.ChildIds, opt => opt.MapFrom(src => new[] {src.children})); 

Nhưng tôi nhận được một lỗi nói rằng nó không biết làm thế nào để chuyển đổi một danh sách các đối tượng trẻ em đến một int16. Bất kỳ đề xuất?

Trả lời

12

Sử dụng một truy vấn LINQ để lấy chỉ ChildIds:

.ForMember(d => d.ChildIds, o => o.MapFrom(s => s.Children.Select(c => c.ChildId).ToArray())); 
+0

Tôi biết nó phải là một cái gì đó đơn giản như vậy .. cảm ơn bạn !! – lambinator

+0

OMG điều này cực kỳ hữu ích! – starmandeluxe

Các vấn đề liên quan