Automapper映射到列表的字符串

问题描述 投票:0回答:3

我有两堂课

 public class SourceClass
{
    public Guid Id { get; set; }
    public string Provider { get; set; }
}


public class DestinationClass
{
    public Guid Id { get; set; }
    public List<string> Provider { get; set; }
}

我已经使用以下代码初始化了映射

CreateMap<SourceClass, DestinationClass>();

然后在我的控制器中,我有:

Mapper.Map<List<DestinationClass>>(requests)

其中“请求”是要传递到我的控制器中的SourceClass对象的列表。

我的问题是,如何将SourceClass中的Provider(类型为字符串)映射到Provider(目标类中为List类型的提供者?

sourceclass中的提供者将始终为单个字符串,而目标类中的提供者将始终为单个字符串的列表。

这是我在映射配置中尝试过的内容:

CreateMap<SourceClass, DestinationClass>().ForMember(destinationMember => destinationMember.Provider,
                memberOptions => memberOptions.MapFrom(src => {
                return string.IsNullOrEmpty(src.Provider) ? [""] : src.Provider.ToList());
c# conditional-statements automapper
3个回答
2
投票

首先,我建议您将目标属性重命名为Providers,以避免造成混淆/表示它是一个集合。然后您可以尝试一下

CreateMap<SourceClass, DestinationClass>()
  .ForMember(destinationMember => destinationMember.Providers,
  memberOptions => memberOptions.MapFrom(src => new List<string> {src.Provider ?? ""}));

特别是此位

src => new List<string> {src.Provider ?? ""}

使用一个值创建一个新的字符串类型列表,该值可以为src.Provider,如果为空,则为空字符串。


0
投票

如果将源成员的Provider属性转换为列表,则将获得char类型的列表。此代码应反映您的需求。

CreateMap<SourceClass, DestinationClass>()
.ForMember(
    destinationMember => destinationMember.Provider,
    memberOptions => memberOptions.MapFrom(
        src => string.IsNullOrEmpty(src.Provider) ? new List<string>() { "" } : new List<string> { src.Provider }
    )
);

0
投票

用这个替换您的映射配置:

CreateMap<SourceClass, DestinationClass>()
  .ForMember(destinationMember => destinationMember.Provider,
  memberOptions => memberOptions
    .MapFrom(src => 
    { 
      return new List<string>{ string.IsNullOrEmpty(src.Provider) ? "" : src.Provider)
    });
© www.soinside.com 2019 - 2024. All rights reserved.