简体   繁体   English

AutoMapper 将 map Object 放入对象列表

[英]AutoMapper to map Object into List of Objects

I want to map an object of PersonDetails class to list of Details object. The PersonDetails class is我想要 map 和 object 的 PersonDetails class 到详细信息列表 object。PersonDetails class 是

public class PersonDetails
             {
               public PersonItems PersonItems{get;set;}
               public int CreatedBy {get;set;}
               public string PersonCode {get;set;}
             }
public class PersonItems
             {
              public string ItemCode {get; set;}
              public List<string> ItemColors {get;set;}
              public string ItemName {get; set;}
             }

For each ItemColor trying to map this to following list of object class:对于每个 ItemColor 尝试 map 这到以下列表 object class:

public class Seller{
             public string SellerCode {get;set;}
             public Details details {get; set;}
             }
public class Details
             {
              public string ItemCode {get; set;}
              public string ItemColor {get;set;}
              public string ItemName {get; set;}
              public string PersonCode {get;set}
             }`

I have tried the following code by applying a loop on ItemColors in service class, calling automapper.我通过在服务 class 中对 ItemColors 应用循环来尝试以下代码,调用 automapper。

List<Details> detailsList = new();
foreach( string ItemColor in PersonDetails.PersonItems.ItemColor){
Details details = _mapper.Map<PersonDetails>( details) ;
details.Add(details);
}

I have created a seperate mapper class to register mapper methods.我创建了一个单独的映射器 class 来注册映射器方法。

public void RegisterPersonDetailstoDetailsObjectList(){
     CreateMap<PersonDetails,Details>()
     .ForMember(d => d.details.PersonCode, src=> src.MapFrom(src => src.PersonCode
     .ForMember(d => d.PersonItems, src => src.MapFrom( s => new Details
        {
            ItemCode = s.PersonItems.ItemCode,
            **ItemColor = s.PersonItems.ItemColor,**
            ItemName = s.PersonItems.ItemName
        }
}));
}

Can't figure out to get each ItemColor from the loop in bold text and pass to this automapper method.无法弄清楚以粗体文本从循环中获取每个 ItemColor 并传递给此自动映射器方法。 Basically I want to iterate over itemColor and assign the same to each ListOf object mapped.基本上我想遍历 itemColor 并将其分配给映射的每个 ListOf object。

From my understanding of your question, you seem to map from the PersonDetails object to the List<Details> list.根据我对你的问题的理解,你似乎 map 从PersonDetails object 到List<Details>列表。

You need the Custom Type Converter for the following mapping:以下映射需要自定义类型转换器

public void RegisterPersonDetailstoDetailsObjectList()
{
     CreateMap<PersonDetails, Details>()
        .ForMember(d => d.PersonCode, src=> src.MapFrom(src => src.PersonCode))
        .ForMember(d => d.ItemCode, src => src.MapFrom(src => src.PersonItems.ItemCode))
        .ForMember(d => d.ItemName, src => src.MapFrom(src => src.PersonItems.ItemName));

     CreateMap<PersonDetails, List<Details>>()
        .ConvertUsing((src, dest, ctx) =>
        {
            dest = new List<Details>();

            foreach (string itemColor in src.PersonItems.ItemColors)
            {
                var details = ctx.Mapper.Map<Details>(src);
                details.ItemColor = itemColor;

                dest.Add(details);
            }

            return dest;
        });
}

Demo @ .NET Fiddle演示 @ .NET Fiddle

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM