[英]automapper: generate condition by naming convention
能否请你帮我一下。 找不到如何更新自动映射器约定或任何其他配置以实现跟踪的方法。
假设我有一个这样的课程:
public class A
{
public bool PropertyUpdated {get;set;}
public int PropertyValue {get;set;}
}
和:
public class B
{
public int PropertyValue {get;set;}
}
我可以以某种方式自动生成以下地图(通过命名聚会等)
CreateMap<A,B>()
.ForMember(b => b.PropertyValue, mm =>
{
mm.Condition(a => a.PropertyUpdated);
mm.MapFrom(a => a.PropertyValue);
});
我拥有大量此类属性,并且不想自己编写此类规则。 只是想知道是否有一种方法可以告诉automapper我想使用一些常规条件。
提前致谢!
谢谢@Lucian,它可以解决问题。
ForAllPropertyMaps(pm => !pm.SourceMember.Name.EndsWith("Updated"), (pm, ce) =>
{
var sourceType = pm.TypeMap.SourceType;
var conditionPropertyName = $"{pm.SourceMember.Name}Specified";
var property = sourceType.GetProperty(conditionPropertyName, BindingFlags.Instance | BindingFlags.Public);
if (property == null) return;
var conditionParameter = Expression.Parameter(typeof(object));
var parameterConvertion = Expression.Convert(conditionParameter, sourceType);
var getPropertyValue = Expression.Property(parameterConvertion, conditionPropertyName);
var lambda = Expression.Lambda<Func<object, bool>>(getPropertyValue, conditionParameter);
ce.Condition(lambda.Compile());
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.