2017-07-25 170 views
0

我使用nhibernate将元素从一个对象映射到另一个对象。但是,我的复杂对象中的一个元素需要设置一个条件,以便目标对象元素相应地设置一个值。C#自动映射条件映射

为了详细

Mapper.CreateMap<OneObject, AnotherObject>() 
.ForMember( 
    destination => destination.complexelement, 
     option => option.MapFrom(source=> source.value == enumValue.ToString() 
     ? new object({Id 123 }) 
     : new object ({ Id 567 })) 

这样解释,你可以看到,我想设置基于源对象的值在目标对象的嵌套对象来创建一个对象,并将其保存到目的地元件。上面的示例代码我尝试过,但它抛出一个错误,说我不能在lambda表达式上使用字符串。

有谁知道如何根据条件设置对象?

谢谢

+0

什么'enumValue'?什么是实际的错误文本? – stuartd

+0

emumvalue只是为了比较。我给你的错误信息 – Andy5

回答

0

我认为这会对你有用。不幸的是它基于AutoMapper 6.1.1。希望你能使用这个版本。因为我不知道自己的班级结构,所以我创建了简单的测试班,但您应该能够将样本转移到您的场景中。

OneObject oo = new OneObject(); 
oo.value = "B"; 
Testenum enumValue = Testenum.A; 

Mapper.Initialize(a => a.CreateMap<OneObject, AnotherObject>() 
    .ForMember(
     destination => destination.complexelement, 
     option => option.MapFrom(source => source.value == enumValue.ToString() 
      ? 123 
      : 567))); 

AnotherObject ao = Mapper.Map<OneObject, AnotherObject>(oo); 

测试类和枚举

class OneObject 
{ 
    public string value { get; set; } 
} 

class AnotherObject 
{ 
    public object complexelement { get; set; } 
} 

enum Testenum 
{ 
    A, 
    B, 
    C 
}