自动映像使用目标属性并映射单个属性

时间:2015-07-13 15:08:54

标签: c# automapper

我想使用automapper在两个列表之间进行映射。一个列表包含代码和字符串,另一个包含代码和其他字段。我想使用目标对象上的所有现有值/属性,除了一个。这是否可以与automapper一起使用?我不想用UseDestinationValue()指定所有属性。尝试以下操作,但不是在更新一个属性的情况下返回目标列表,而是返回一个只包含匹配项的新列表(在两个列表中),并且所有字段都为空:

public static IMappingExpression<TSource, TDest> UseAllDestinationValues<TSource, TDest>(this IMappingExpression<TSource, TDest> expression)
    {
        expression.ForAllMembers(opt => opt.UseDestinationValue());
        return expression;
    }

    Mapper.CreateMap<Perm, PermViewModel>()
            .UseAllDestinationValues()
            .ForMember(dest => dest.CanEdit, opt => opt.MapFrom(s => s.editable));

var items = Mapper.Map<List<Perm>, List<PermViewModel>>(list, model.Items.Items);

1 个答案:

答案 0 :(得分:0)

我必须使用从一个应用程序到另一个应用程序的可空双打来做类似的事情。您可以设置类型转换器。如果没有你的特定课程,我无法确切地说明如何做到这一点,但这是我的榜样。

Mapper.CreateMap<double?, double>().ConvertUsing<NullableDoubleConverter>();

private class NullableDoubleConverter : TypeConverter<double?, double>
{
    protected override double ConvertCore(double? source)
    {
        if (source == null)
            return Constants.NullDouble;
        else
            return (double)source;
    }
}

你显然可以使用类似的东西进行调整。

Mapper.CreateMap<Perm, PermViewModel>().ConvertUsing<PermConverter>();

private class PermConverter : TypeConverter<Perm, PermViewModel>
{
    protected override PermViewModel ConvertCore(Perm source)
    {
        return new PermViewModel() 
        {
             //Set your parameters here. 
        };
    }
}