簡體   English   中英

AutoMapper 在映射列表時忽略屬性

[英]AutoMapper ignore properties while mapping a list

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

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

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

我嘗試使用 formember 選項,但它會生成錯誤,可能是因為當您想映射列表時無法使用該屬性? 如果是,是否有替代解決方案?

正如 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();

感謝您的有用評論。 因為這兩個列表在映射之前已經制作好了,所以我是這樣做的:

從數據庫中獲取列表:

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]));
}

有人可以確認這是一個好方法嗎?

使用此映射器配置來獲得所需的結果:

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);

正如其他人建議的那樣,我們應該避免映射列表和集合。 為了忽略所有未映射的屬性,以下對我有用。

 CreateMap<Metadata, MetadataInput>()
        .ForMember(dest => dest.Id, o => o.MapFrom(src => src.sourceIdentifier))
        .ForMember(dest => dest.Name, o => o.MapFrom(src => src.sourceName))
        .ForAllOtherMembers(opts => opts.Ignore());

ForAllOtherMembers 應該是方法鏈中的最后一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM