Automapper中的多条件映射

时间:2018-10-16 17:03:32

标签: c# automapper

我需要一些正在做的映射的帮助。

我正在映射具有两个字段的模型

public ProductCategory
public string FirstType
public string SecondType

到只有一个字段的另一个模型

public string ProductType

现在我必须根据ProductCategory的内容将First Type或Second Type映射到ProductType。如果不满足条件,则ProductType应该为空

例如,我需要这样的东西:

.ForMember(dest => dest.ProductType, opt => opt.MapFrom(src => 
{
   if (src.ProductCategory.Equals("something")
     { 
        src.FirstType
     }
   else if (src.ProductCategory.Equals("something")
     {
        src.SecondType
     }
   else 
    {
       null 
    }
}))

当然,语法是完全错误的,显然是行不通的,我只是想解释一下我要实现的目标。

我有一个临时解决方案

.ForMember(dest => dest.ProductType, opt => opt.MapFrom(src => src.ProductCategory.Contains("something") ? src.FirstType: src.SecondType))

但这并不是我完全需要的。

有什么建议吗?

预先感谢

1 个答案:

答案 0 :(得分:1)

为避免使地图代码看起来很混乱,您可以做的是将其实际上分成一些您实际上知道需要对分配的正确值进行检查的方法。

这是代码

.ForMember(dest => dest.ProductType, opt => opt.MapFrom(src => CalculateProductCategory(src.ProductCategory))) and then you write your own CalculateProductCategory

您的方法将如下所示

    public ProductType CalculateProductCategory(ProductCategory category) {

    if (productCategory.Equals("something")
    { 
        return FirstType
    }
    else if (productCategory.Equals("something")
    {
        return SecondType
    }
    else 
    {
       return null 
    }

}