2012-11-09 11 views
5

Tôi đã đoạn mã sau đó không hoạt động:Lập bản đồ một bộ sưu tập nhóm sử dụng AutoMapper

var groupedZones = this._zoneDataManager.GetZonesGroupedByCountry(); 
      IEnumerable<IGrouping<String, ZoneDTO>> zonesToReturn = Mapper.Map<IEnumerable<IGrouping<String, Zone>>, IEnumerable<IGrouping<String, ZoneDTO>>>(groupedZones); 

tôi tiếp tục nhận được ngoại lệ sau đây:

Giá trị \ "System.Collections.Generic. Danh sách 1[SCGRE.Business.Model.ZoneDTO]\" is not of type \"System.Linq.IGrouping 2 [System.String, SCGRE.Business.Model.ZoneDTO] \ " và không thể sử dụng trong bộ sưu tập chung này. \ R \ nTên thông số: giá trị

Tôi không hiểu tại sao nó đang cố gắng để ánh xạ một List<T> thành một IGrouping<String, T> hoặc có lẽ tôi đã không hiểu được ngoại lệ đúng ... Nhưng tôi về cơ bản có một IEnumerable<IGrouping<String, Zone>> và tôi muốn để lập bản đồ nó để IEnumerable<IGrouping<String, ZoneDTO>>

Lưu ý rằng tôi đã tạo ra một bản đồ Zone-ZoneDTO như sau:

Mapper.CreateMap<Zone, ZoneDTO>(); 

Và đó là bởi vì cả hai lớp có gần như chính xác các tính chất tương tự.

Bất kỳ ý tưởng nào?

+0

Tôi đã đơn giản hóa nó và đã chạy một số kiểm tra đơn vị, và tiếc là nó không giống như IGrouping hiện đang được hỗ trợ. Nếu bạn không nhận được giải pháp từ đây, bạn cũng có thể thử [Danh sách gửi thư của AutoMapper] (https://groups.google.com/forum/?fromgroups#!forum/automapper-users) – Mightymuke

Trả lời

4

Sau khi một số công việc arround, tôi đoán bạn không thể làm một số điều như

Mapper.CreateMap<IEnumerable<IGrouping<String, Zone>>, IEnumerable<IGrouping<String, ZoneDTO>>>() 

Để cụ thể, AutoMapper hỗ trợ việc thu thập nguồn các loại bao gồm: (Chỉ Generic loại)

IEnumerable, IEnumerable<T>, ICollection, ICollection<T>, IList, IList<T>, List<T>, Arrays 

AutoMapper sẽ không hỗ trợ IGrouping vì đó là loại không thể đếm được.

Thay vào đó bạn có thể thực hiện phương pháp đơn giản sau đây,

var zones = this._zoneDataManager.GetZones(); // Write new method in your ZoneDataManager 
var zoneDTOs = Mapper.Map<List<Zone>, List<ZoneDTO>>(zones); 
IEnumerable<IGrouping<String, ZoneDTO>> zonesToReturn = zoneDTOs.GroupBy(z => z.Country); 

Vui lòng đọc this. Hi vọng điêu nay co ich.

+1

@TaniaMaria, Bạn đã thử với điều này chưa tiếp cận? Làm ơn cho tôi biết. –

+1

Tôi tin rằng IGrouping hiện được hỗ trợ. Tôi có thể ánh xạ thành công từ IGrouping tới entityDto; và automapper tự động hỗ trợ danh sách <> tới List <> ánh xạ nếu ánh xạ riêng lẻ được cấu hình –