2016-06-16 66 views
1

我試圖通過使用EF的導航屬性來映射兩個集合。具有EF導航屬性的自動映射器

Collection.ItemsList<Item>

CollectionDTO具有導航屬性到交叉連接表稱爲CollectionItem,其具有另一個導航屬性Item

我希望每個CollectionDTO.CollectionItem.Item都映射到Collection.Item

我試過這個,但我無法弄清楚。

有人可以幫忙嗎?

var mapperConfig = new MapperConfiguration(cfg => 
{ 
    // CreateMap<source, destination>()  
    cfg.CreateMap<Collection, CollectionDTO>() 
     .ForMember(dest => dest.Items, 
        opts => opts.MapFrom(src => 
         src.CollectionItems.Where(x => x.CollectionId == src.Id).ToList().ForEach(ci => ci.Item))); 

}); 

回答

0

您可以使用Select擴展方法是這樣的:

// CreateMap<source, destination>()  
    cfg.CreateMap<Collection, CollectionDTO>() 
     .ForMember(dest => dest.Items, 
        opts => opts.MapFrom(src => 
         src.CollectionItems.Select(ci=>ci.Item).ToList())); 

如果Item導航屬性是一個集合,然後使用SelectMany擴展方法:

// CreateMap<source, destination>()  
    cfg.CreateMap<Collection, CollectionDTO>() 
     .ForMember(dest => dest.Items, 
        opts => opts.MapFrom(src => 
         src.CollectionItems.SelectMany(ci=>ci.Item).ToList())); 
+0

第二個選項是給我編錯誤,但第一個選項就像一個魅力!謝謝! – duyn9uyen

+0

不客氣;)。這就是我猜到的,'CollectionItems'代表一個聯結表,'Item'是一個參考導航屬性。 – octavioccl