我可以帮您进行翻译。以下是需要翻译的内容:
我有一个源代码类,如下所示:
public class Source
{
public Field[] Fields { get; set; }
public Result[] Results { get; set; }
}
并且有一个目标类,例如:
public class Destination
{
public Value[] Values { get; set; }
}
我希望能够根据哪一个值不为空(只有一个值会有值),从Fields
或Results
中映射到Values
。
我尝试了以下映射:
CreateMap<Fields, Values>();
CreateMap<Results, Values>();
CreateMap<Source, Destination>()
.ForMember(d => d.Values, opt =>
{
opt.PreCondition(s => s.Fields != null);
opt.MapFrom(s => s.Fields });
})
.ForMember(d => d.Values, opt =>
{
opt.PreCondition(s => s.Results != null);
opt.MapFrom(s => s.Results);
});
唯一的问题是,如果最后一个 .ForMember
映射不符合条件,则会清除第一个映射的结果。
我也考虑过使用条件运算符:
opt => opt.MapFrom(s => s.Fields != null ? s.Fields : s.Results)
但很明显它们是不同的类型,所以无法编译。
如何根据条件从不同类型的源属性映射到单个属性?
谢谢
ResolveUsing
时,会导致一些丑陋的代码,并让你想知道是否使用AutoMapper比构建工厂更好。 - crush