Automapper。如果源成员为null,则映射

时间:2017-06-08 12:25:48

标签: c# .net automapper

我有两个类,并使用Automapper将其映射到另一个类。例如:

public class Source 
{
    // IdName is a simple class containing two fields: Id (int) and Name (string)
    public IdName Type { get; set; } 

    public int TypeId {get; set; }

    // another members
}

public class Destination
{
    // IdNameDest is a simple class such as IdName
    public IdNameDest Type { get; set; } 

    // another members
}

然后我使用Automapper将Source映射到Destination

cfg.CreateMap<Source, Destination>();

它运作正常,但有时Type课程中的成员Source变为null。在这些情况下,我想在Type属性的Destination课程中映射成员TypeId。这就是我想要的东西:

if Source.Type != null 
then map Destination.Type from it
else map it as 
    Destination.Type = new IdNameDest { Id = Source.Id }

AutoMapper可以吗?

2 个答案:

答案 0 :(得分:6)

您可以在声明映射时使用.ForMember()方法。 像这样:

cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type != null ? src.Type : new IdNameDest { Id = src.Id }));

答案 1 :(得分:1)

尽管LeeeonTM的答案很好用,但AutoMapper提供了一种专门的机制来替换空值。

“它允许您在目标链的任何位置,如果源值是null,则为目标成员提供备用值”。

示例:

cfg.CreateMap<Source, Destination>()
    .ForMember(dest => dest.Value, opt => opt.NullSubstitute(new IdNameDest { Id = src.Id }));