我当前正在使用Automapper 8.0,并试图将参数作为映射条件传递给映射器。
我正在映射两个包含另一个对象的IEnumerable的对象。例如...
public class Source {
public IEnumerable<SourceIE> value {get; set;}
}
public class SourceIE
{
public long Id { get; set; }
public string Name { get; set; }
public number Rating { get; set; }
}
public class Destination {
public <IEnumerable>DestinationIE value {get; set;}
}
public class DestinationIE
{
public long ID { get; set; }
public string Name { get; set; }
public number Rating { get; set; }
}
我为根对象设置了自动映射器,以忽略我的子文档,然后为我的子文档创建了一个新的映射器,如下所示:
var mapped = _mapper.Map<IEnumerable<Destination>>
(data, opt => opt.Items.Add("ShowStarRating", false));
在映射器内部,我试图设置一个条件,以便仅在ShowStarRating = true时才会映射Rating。
.ForMember(dest => dest.Rating, opt =>
{
opt.Condition(context=>
{
return (bool)context.Options.Items["ShowStarRating"];
}
);
opt.MapFrom(src => src.Rating);
}
);
我遇到的这个问题是无法识别选项,当我将鼠标悬停时,它说“源”不包含“选项”的定义并且没有可访问的扩展方法。
我一生都不知道如何从Condition内部访问传入的Options.Items值。在Automapper 5或更低版本中,似乎有大量有关如何执行此操作的信息,但对于8则没有。
答案 0 :(得分:0)
经过一堆反复试验后,我得以弄清楚这一点。事实证明,上下文是条件中的第四项,因此我只需要在阅读它之前就可以弄懂它。
.ForMember(dest => dest.Rating,
opt => opt.Condition(
(src, dest, x, y, context) => context.Options.Items["ShowStarRating"] == "true"
)
);