Существует два класса
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);
});
Если значение {имя свойства источника} равно null
, то значение IsNull {имя свойства источника} равно true
. Иначе, если значение {имя свойства источника} не равно null
, тогда значение {имя свойства источника} Значение равно значению {имя свойства источника}.
У меня есть много свойств, которые отвечают этому правилу отображения,Поэтому я не хочу писать правила отображения для каждого свойства, как указано выше. Я хочу настроить правило для такого отображения глобально.
Как настроить AutoMapper, чтобы он мог обрабатывать такие сложные сопоставления?