C# 使用Automapper可以使用源中的特性值从对象列表映射到单个对象
资料来源:C# 使用Automapper可以使用源中的特性值从对象列表映射到单个对象,c#,automapper,C#,Automapper,资料来源: 公共类消息 { 公共日期时间接受日期{get;set;} 公共列表价格详细信息{get;set;} } 公共类价格详情 { 公共字符串ServiceCode{get;set;} 公共字符串ServiceValue{get;set;} } 目的地: public class Message { public DateTime AcceptedDate { get; set; } public List<PriceDetail> PriceDetails
公共类消息
{
公共日期时间接受日期{get;set;}
公共列表价格详细信息{get;set;}
}
公共类价格详情
{
公共字符串ServiceCode{get;set;}
公共字符串ServiceValue{get;set;}
}
目的地:
public class Message
{
public DateTime AcceptedDate { get; set; }
public List<PriceDetail> PriceDetails { get; set; }
}
public class PriceDetail
{
public string ServiceCode { get; set; }
public string ServiceValue { get; set; }
}
公共类GroupEntity
{
公共日期时间接受日期{get;set;}
公共列表计划{get;set;}
}
公共类行星
{
公共字符串metalevel{get;set;}
公共字符串MdCode{get;set;}
公共字符串RxCode{get;set;}
公共字符串百分比更改{get;set;}
}
来源价格详细信息可能类似于:
- ServiceCode=“MetalLevel”
- ServiceValue=“黄金”
- 如果PriceDetail.ServiceCode=“MetalLevel”,则将其映射到PlanEntity.MetalLevel
- 如果PriceDetail.ServiceCode=“RxCode”,则将其映射到PlanEntity.RxCode
- 等等
CreateMap()
public class GroupEntity
{
public DateTime AcceptedDate { get; set; }
public List<PlanEntity> Plans { get; set; }
}
public class PlanEntity
{
public string MetalLevel { get; set; }
public string MdCode { get; set; }
public string RxCode { get; set; }
public string PercentChange { get; set; }
}
.FormMember(dest=>dest.MetalLevel,opt=>{
opt.predition(src=>src.ServiceCode==“MetalLevel”);
opt.MapFrom(src=>src.ServiceCode);
});
CreateMap()
.ForMember(dest=>dest.RxCode,opt=>{
opt.predition(src=>src.ServiceCode==“RxCode”);
opt.MapFrom(src=>src.ServiceCode);
});
您需要在要映射项目的位置编写此逻辑。在mapper中,这是不可能的。
CreateMap<PriceDetail, PlanEntity>()
.ForMember(dest => dest.MetalLevel, opt => {
opt.PreCondition(src => src.ServiceCode=="MetalLevel");
opt.MapFrom(src => src.ServiceCode);
});
CreateMap<PriceDetail, PlanEntity>()
.ForMember(dest => dest.RxCode, opt => {
opt.PreCondition(src => src.ServiceCode=="RxCode");
opt.MapFrom(src => src.ServiceCode);
});