2016-08-31 43 views
0

我有一個相當複雜的情況。 我有一個順序:Automapping雙嵌套IEnumerable

public partial class Order 
    { 
     public string orderNum { get; set;} 
     public ICollection<Shipment> Shipments { get; set; } 
     ... 
    } 

我有一個觀點BIGVIEW:

public partial class BIGVIEWVM 
    { 
     public string orderNum { get; set;} 
     public OrderDetailsVM Order { get; set; } 
     public ShipmentsTableVM Shipments { get; set; } 
    } 

子視圖,ShipmentsTableVM就像這樣:

public partial class ShipmentsTableVM 
    { 
      public string somethingelse {get;set;} 
      public IEnumerable<Shipment_Table_Row_VM> Shipments{get;set;} 
    } 

它實際上比這更復雜,但是這是最簡單的問題。我有一個Order有很多Shipments。我想使用從OrderBIGVIEW的AutoMapper撥打ProjectTo。整個Order映射到OrderDetailsVM沒有問題,但是,我不知道該怎麼做是將ICollection傳遞給我的ShipmentsTableVM,然後將其映射到IEnumerable中。

  cfg.CreateMap<Order, BIGVIEW>() 
       .ForMember(d => d.order, opt => opt.MapFrom(s => s)) 
       ...? 

我以爲我可以照顧從ICollection<Shipments>映射到我ShipmentsTableVM

  cfg.CreateMap<IEnumerable<Shipment>, ShipmentsTableVM>() 
       .ForMember(d => d.Shipments, opt => opt.MapFrom(s => s)) 
       ; 

但是,這並不工作 - 我得到一個錯誤約LINQ的不能夠映射的東西,不是IEnumerable ...但我使用IEnumerable,所以我不明白。我也嘗試了各種其他配置,但我無法快速完成任何操作。

我正在尋找一個Automapper解決方案,因爲我不想手動在我的控制器中進行投影。

謝謝

回答

0

您需要將適當的模型傳遞給子視圖。嘗試:

Order.Shipments 

Model.Shipments 
+0

我想這一點,那我也映射ICollection的但它似乎有'cfg.CreateMap ,ShipmentsTableVM>()' – Worthy7

+0

嘗試'CFG的問題。 Map'而不是'cfg.CreateMap' – Hadee

+0

cfg.Map不存在 – Worthy7

0

有實現這一幾種方法,這裏就是其中之一。

cfg.CreateMap<Shipments, Shipment_Table_Row_VM>(); 

cfg.CreateMap<ICollection<Shipments>, ShipmentsTableVM>() 
.ConstructUsing(obj => new ShipmentsTableVM()) 
.ForMember(d => d.Shipments, opt => opt.MapFrom(s => s)); 

cfg.CreateMap<Order, BIGVIEWVM>(); 
+0

'/'應用程序中的服務器錯誤。 無法比較'System.Collections.Generic.ICollection'1 [[MYAPP.Models.SHIPMENT,MYAPP,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'類型的元素。僅支持原始類型,枚舉類型和實體類型。' – Worthy7

+0

僅在執行ProjectTo時發生錯誤,而不是在使用Mapper.Map時發生.... – Worthy7