.net core 使用Automapper仅为每个属性创建附加条件副本
我有两个相同类型的对象。我想使用Automapper有条件地将值从objectA复制到objectB(本质上是在相同类型的两个对象之间创建一个仅添加的副本)。我已经研究了条件映射和其他转换器类型,但我不想为对象的每个属性指定它。我想用完全相同的逻辑复制每个属性.net core 使用Automapper仅为每个属性创建附加条件副本,.net-core,automapper,.net Core,Automapper,我有两个相同类型的对象。我想使用Automapper有条件地将值从objectA复制到objectB(本质上是在相同类型的两个对象之间创建一个仅添加的副本)。我已经研究了条件映射和其他转换器类型,但我不想为对象的每个属性指定它。我想用完全相同的逻辑复制每个属性 如果源属性为NULL,则不要复制 如果目标已具有值,则不要复制 如果目标为空,则从源复制 如果源属性和目标属性都是列表,则仅将缺少的项添加到目标列表中,因为目标可能有不在源列表中的项需要保留 我知道我可以通过为每个属性指定这些规则来创
- 如果源属性为NULL,则不要复制
- 如果目标已具有值,则不要复制
- 如果目标为空,则从源复制
- 如果源属性和目标属性都是列表,则仅将缺少的项添加到目标列表中,因为目标可能有不在源列表中的项需要保留
public static TOutput CopyAll<TInput, TOutput>(TInput input, TOutput output)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<TInput, TOutput>().ForAllMembers(o => o.Condition((src, dest, srcValue, destValue) =>
{
return (srcValue != null && destValue == null);
}));
});
IMapper mapper = config.CreateMapper();
return mapper.Map<TInput, TOutput>(input, output);
}
publicstatictoutput CopyAll(TInput输入,TOutput输出)
{
var config=new-MapperConfiguration(cfg=>
{
cfg.CreateMap().ForAllMembers(o=>o.Condition((src,dest,srcValue,destValue)=>
{
返回(srcValue!=null&&destValue==null);
}));
});
IMapper mapper=config.CreateMapper();
返回mapper.Map(输入、输出);
}
对所有成员和条件映射进行研究。这非常有效,Lucian。我仍在试图弄清楚如何将objectA中属于列表类型的属性中的项复制到objectB中的现有列表中,以便只添加新项(而不是删除列表中仅存在于objectB中的项)。映射到现有集合时,首先清除目标集合。如果这不是您想要的,请查看AutoMapper.Collection.Yea,我不希望清除此集合。一些基本选项在映射缺少的项之前无法清除。我来看看AutoMapper.Collection,但它实际上删除了现有集合中不在源代码中的项。需要选择不删除。