【发布时间】:2020-02-29 23:40:38
【问题描述】:
有两个类
class A
{
public string ProductionDivision { get; set; }
}
class B
{
private object _productionDivision;
public enum ProductionDivisionOneofCase
{
None = 0,
IsNullproductionDivision = 15,
ProductionDivisionValue = 16,
}
private ProductionDivisionOneofCase _productionDivisionCase = ProductionDivisionOneofCase.None;
public bool IsNullProductionDivision
{
get { return _productionDivisionCase == ProductionDivisionOneofCase.IsNullproductionDivision ? (bool)_productionDivision : false; }
set
{
_productionDivision = value;
_productionDivisionCase = ProductionDivisionOneofCase.IsNullproductionDivision;
}
}
public string ProductionDivisionValue
{
get { return _productionDivisionCase == ProductionDivisionOneofCase.ProductionDivisionValue ? (string)_productionDivision : ""; }
set
{
_productionDivision = value;
_productionDivisionCase = ProductionDivisionOneofCase.ProductionDivisionValue;
}
}
}
我想根据条件将 ProductionDivision 属性映射到 B 类的属性之一 - null(映射到 IsNullProductionDivision)或不 null(映射到 ProductionDivisionValue)源适当的价值。我可以像下面这样实现它。
CreateMap<A, B>()
.ForMember(g => g.IsNullProductionDivision, m =>
{
m.PreCondition(s => s.ProductionDivision == null);
m.MapFrom(b => true);
})
.ForMember(g => g.ProductionDivisionValue, m =>
{
m.PreCondition(s => s.ProductionDivision != null);
m.MapFrom(b => b.ProductionDivision);
});
如果 {source property name} 的值为 null,则 IsNull{source property name} 的值为 true。
否则,如果 {source property name} 的值不是 null,则 {source property name}Value 的值是 {source property name} 的值。
我有许多属性可以响应此映射规则。所以,我不想为上面的每个属性编写映射规则。我想为这样的映射全局配置一个规则。
如何配置 AutoMapper 以使其能够处理如此复杂的映射?
【问题讨论】:
-
您可以使用全局pre/post-fixes或
ForAllMaps和ForAllMembers。 -
@LucianBargaoanu,感谢您的回复。我找到了将方法组合到一个解决方案的方法。
标签: c# automapper