C# Automapper中的多条件映射

C# Automapper中的多条件映射,c#,automapper,C#,Automapper,我需要一些我正在做的映射的帮助 我正在映射一个有两个字段的模型 public ProductCategory public string FirstType public string SecondType 到另一个只有一个字段的模型 public string ProductType 现在,我必须根据ProductCategory的内容将第一个或第二个类型映射到ProductType。如果不满足条件,ProductType应该为null 例如,我需要这样的东西: .ForMember(de

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

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

public ProductCategory
public string FirstType
public string SecondType
到另一个只有一个字段的模型

public string ProductType
现在,我必须根据ProductCategory的内容将第一个或第二个类型映射到ProductType。如果不满足条件,ProductType应该为null

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

.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))
但这并不完全是我所需要的

有什么建议吗


提前感谢

要避免使映射代码看起来非常混乱,您可以做的是将其实际分离为您实际知道的方法,这些方法需要检查要分配的正确值

这是密码

.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 
    }

}

你为什么不把它提取到一个方法中呢?它可能会清除一个位,你的意思是使用AutoMapper?不,你可以使用AutoMapper,但是从一个方法中提取变量结果。类似于
.formmember(dest=>dest.ProductType,opt=>opt.MapFrom(src=>CalculateProductCategory(src.ProductCategory))
然后编写自己的
CalculateProductCategory
methodRight,它可以这样工作,非常感谢。唯一的问题是,我有5或6个字段,这些字段必须根据相同的条件填充,因此我必须为每个字段编写5-6个方法,但这仍然是我的问题的解决方案,您可以重用,最新。