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个方法,但这仍然是我的问题的解决方案,您可以重用,最新。