2013-10-16 115 views
0

AutoMapper在映射列表時可能忽略某些屬性嗎?例如,我有兩個類Metadata和MetadataInput。AutoMapper在映射列表時忽略屬性

兩者都有相同的字段,除了目的地「MetadataInput」,它有一個額外的字段。

Mapper.CreateMap <IList<Metadata>, IList<MetadataInput>>() 

我試圖使用formember選項,但它產生的錯誤,可能是因爲當你想映射列表中的屬性不能用?如果是,是否有替代解決方案?

+2

通常你應該永遠映射列表或集合。您映射這些類,然後AutoMapper負責其餘的部分。 –

+0

嘗試Mapper.CreateMap ()並將其添加到列表中 –

回答

1

正如Darin Dimitrov建議的那樣,您不應該嘗試映射列表或集合。

如果你有1 - 他們之間的一切> 1的關係,才使得像地圖:

Mapper.CreateMap<Metadata, MetadataInput>().ForMember(s => s.Property, t => t.Ignore()); 

那麼你可以使用你的清單,並選擇到其他列表。

var metadataList = new List<Metadata>(); 

var meatadataInputList = metadataList.Select(p => Mapper.Map<MetadataInput>(p).ToList(); 
0

感謝您的有用評論。 因爲這兩個列表被映射之前已經取得我已經做到了這種方式:

獲取從數據庫列表:

List<Metadata> metadatas = _Metadataservice.GetList(_Collectionservice.Get("Koekelare").ID).ToList(); 

創建映射器(感謝您指出我的錯誤):

Mapper.CreateMap<Metadata, MetadataInput>().ForMember(s => s.Property, t => t.Ignore()); 

建立一個新的列表和圖新(單)值逐一:

List<MetadataInput> meta = new List<MetadataInput>(); 
for (int i = 0; i < e.Count; i++) 
{ 
    meta.Add(Mapper.Map<Metadata, MetadataInput>(metadatas[i], input.Metadatas[i])); 
} 

有人能證實這是一個好方法嗎?

0

使用此映射配置,以獲得所需的結果:

Mapper.CreateMap<Output, Input>().ForMember(s => s.InputProperty1, t => t.Ignore()); 
Mapper.CreateMap<Output, Input>().ForMember(s => s.InputProperty2, t => t.Ignore()); 
Mapper.CreateMap<Input, Output>(); 
listOfItems = Mapper.Map<List<Input>, List<Output>>(InputListObject);