2015-12-15 61 views
1

我試圖找出如何使用AutoMapper具有以下情形: -使用Automapper與旗枚舉

我有以下實體模型: -

public class Lender : LegacyEntity 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public ClaimType ClaimTypes { get; set; } 

     //Other properties kepy out for brevity. 
    } 

,這裏是以下服務型號: -

public class LenderServiceModel 
    { 
     [Editable(false)] 
     public int Id { get; set; } 

     [Editable(false)] 
     public string Name { get; set; } 

     [Editable(false)] 
     public List<string> ClaimTypes { get; set; } 
    } 

在實體模型的情況下,ClaimType屬性是一個標誌枚舉: -

[Flags] 
    public enum ClaimType : int 
    { 
     A = 1, 
     B = 2, 
     C = 4, 

    } 

我希望能夠從實體模型映射到服務模型。我需要將ClaimType映射到服務模型列表,但我沒有運氣。

我是新來的AutoMapper,任何幫助將是apreciated。

回答

1

你需要創建一個ClaimTypes屬性映射,其中每個標誌值轉換爲串。有幾種方法可以做到這一點。看看this answer的一些想法。

這裏是如何在AutoMapper設置它(使用的只是ToString()荷蘭國際集團的枚舉然後分割字符串快速和骯髒的方法):

Mapper.CreateMap<Lender, LenderServiceModel>() 
    .ForMember(dest => dest.ClaimTypes, opts => opts.MapFrom(src => 
     src.ClaimTypes.ToString().Split(new string[]{", "}, StringSplitOptions.None).ToList())); 

你可以看到一個工作.NETFiddle here

+0

謝謝你。讚賞。 – Derek

2

首先,你需要得到你的枚舉標誌的字符串列表表示的保持,這可以用這種說法

var t = Enum.GetValues(typeof(ClaimType)).Cast<ClaimType>().Where(r => (claimType & r) == r).Select(r => r.ToString()).ToList(); 

對於AutoMapper你需要指定它,而設立這個特定的映射來完成。 所以對於這一點,將下面的代碼:所以我們用列表的轉換從源代碼映射ClaimTypes場到目的地......

AutoMapper.Mapper.CreateMap<LegacyEntity, LenderServiceModel >() 
    .ForMember(dest => dest.ClaimTypes, 
       opts => opts.MapFrom(Enum.GetValues(typeof(ClaimType)).Cast<ClaimType>().Where(r => (src.ClaimTypes & r) == r).Select(r => r.ToString()).ToList()); 
+0

謝謝,爲了這。 – Derek