2017-09-26 91 views
0

以下是我的源類型。在這種情況下,當成分爲空或Count()== 0時,如何忽略Pizza元素的映射?Automapper - 根據源屬性子項忽略映射

class Menu 
{ 
    public Pizza[] Pizzas { get; set; } 
} 

class Pizza 
{ 
    public string Name { get; set; } 

    public Ingredient[] Ingredients { get; set; } 
} 

class Ingredient 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 


CreateMap<Menu, MenuVM>(); 
CreateMap<Pizza PizzaVM>(); 
CreateMap<Ingredient, IngredientVM>(); 

回答

0

如果您想返回忽略你可以做以下的(推薦):

Mapper.CreateMap<Pizza, PizzaVM>() 
    .ForMember(dest => dest.Ingredients, opt => opt.Condition(source => string.IsNullOrEmpty(src.Ingredients) || src.Ingredients.Count() == 0)) 

否則,您可以創建一個ValueResolver類似以下,但你需要存儲的真/假產生一個新的領域:

public class PizzaIngredientResolver : ValueResolver<Pizza, bool> 
{ 
    protected override bool ResolveCore(Pizza src) 
    { 
     return !string.IsNullOrEmpty(src.Ingredients) && src.Ingredients.Count() != 0; 
    } 
} 

然後,您將需要在MappingConfiguration打電話:

.ForMember(dest => dest.IsIngredientVisible, opts => opts.ResolveUsing<PizzaIngredientResolver>())