来自多个源字段的自动映射条件映射

时间:2017-07-07 11:35:26

标签: c# automapper

我有一个类似以下的源类:

public class Source
{
    public Field[] Fields { get; set; }
    public Result[] Results { get; set; }
}

有一个目标类,如:

public class Destination
{
    public Value[] Values { get; set; }
}

所以我想从E FieldsResults映射到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)

但显然它们是不同的类型,所以不要编译。

如何根据条件从不同类型的源属性映射到单个属性?

由于

2 个答案:

答案 0 :(得分:4)

<kendo-datepicker formControlName="departureValue" [format]="'MMM-dd-yyyy'" (click)="ChangeReturnDate()"></kendo-datepicker> 方法允许您进行更复杂的绑定,您可以使用 ResolveUsing() {{ 1}} 即可。像这样:

IValueResolver

根据您的需要,价值解析器可能如下所示:

Func

答案 1 :(得分:0)

@animalito_maquina answer之后。

这是8.0 Upgrade的更新:

CreateMap<Source, Destination>()
    .ForMember(dest => dest.Values, mo => mo.MapFrom<ConditionalSourceValueResolver>());

为节省您的时间,Queryable Extensions

不支持ValueResolvers