gpt4 book ai didi

c# - 有条件地将一种源类型映射到两种目标类型

转载 作者:行者123 更新时间:2023-11-30 19:15:36 24 4
gpt4 key购买 nike

我有一个像这样的源DTO

public class Member 
{
public string MemberId {get;set;}
public string MemberType {get;set;}
public string Name {get;set;}
}

成员类型可以是“个人”或“公司”。

还有两个像这样的目标类

public class PersonMember 
{
public int PersonMemberId {get;set;}
public string Name {get;set;}
}

public class CompanyMember
{
public int CompanyMemberId {get;set;}
public string Name {get;set;}
}

我想使用 Automapper 检查源类中 MemberType 的值是什么,并根据该类型映射到两个目标类型之一。

我看到了 conditionally mapping 的例子,但它会映射执行条件检查的字段。我想检查条件并映射不同的字段。

var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Foo,Bar>()
.ForMember(dest => dest.baz, opt => opt.Condition(src => (src.baz >= 0)));
});

我的目标是这样的——

cfg.CreateMap<Member, PersonMember>()
.ForMember(dest => PersonMember.PersonMemberId, opt => if the source.MemberType == "Person" perform mapping from MemberId, otherwise do nothing);

cfg.CreateMap<Member, CompanyMember>()
.ForMember(dest => CompanyMember.CompanyMemberId, opt => if the source.MemberType == "Company" perform mapping from MemberId, otherwise do nothing);

最佳答案

引入一些基类Member .继承PersonMember , CompanyMember来自新的基类。

然后定义这些映射:

cfg.CreateMap<Dto.Member, Member>()
.ConstructUsing((memberDto, context) => {
switch (memberDto.MemberType)
{
case "PersonMember":
return context.Mapper.Map<PersonMember>(memberDto);
case "CompanyMember":
return context.Mapper.Map<CompanyMember>(memberDto);
default:
throw new ArgumentOutOfRangeException($"Unknown MemberType {memberDto.MemberType}");
}
});

cfg.CreateMap<Dto.Member, PersonMember>()
.ForMember(dest => PersonMember.PersonMemberId,
opt => opt.MapFrom(src => src.MemberId));

cfg.CreateMap<Dto.Member, CompanyMember>()
.ForMember(dest => CompanyMember.CompanyMemberId,
opt => opt.MapFrom(src => src.MemberId));

现在您可以使用 _mapperInstance.Map<Member>(memberDto); 进行映射

关于c# - 有条件地将一种源类型映射到两种目标类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35948478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com