2012-07-19 122 views
2

我試圖使用AutoMapper從一個Domain對象進行映射,該對象包含一個對象列表,其中我有一個布爾屬性,我想使用AutoMapper使用該屬性將該列表拆分爲目標對象上的兩個目標。AutoMapper將源對象上的單個列表映射到目標對象上的兩個列表

我的基本域看起來是這樣的(源)

//Domain object 
public class Article 
{ 
    public bool IsActive { get; set; } 
} 

所以我的來源將是一個的IList <條>

我的看法是這樣的(目標)

//DTO 
public class ViewAllArticles 
{ 
    public IList<ViewArticle> ActiveArticles { get; set; } 
    public ILIst<ViewArticle> InactiveArticles { get; set; } 
} 

public class ViewArticle 
{ 
    public bool IsActive { get; set; } 
} 

通緝映射

//wanted mapping code (source to destination) 
Mapper.Map<IList<Article>, ViewAllArticles>(collectionOfAllArticles) 

其中ActiveArticles只包含InactiveArticles的用 「IsActive =真」 的文章,以及反之亦然。

希望你們其中一位能幫助我開始做這種映射,我會發現非常有用。

在此先感謝。

回答

5

你能做到這樣

internal class StartNewDemo 
{ 
    public static void Main(string[] args) 
    { 
     Mapper.CreateMap<IList<Article>, ViewAllArticles>() 
      .ForMember(map => map.ActiveArticles, opt => opt.MapFrom(x => x.Where(y => y.IsActive))) 
      .ForMember(map => map.InactiveArticles, opt => opt.MapFrom(x => x.Where(y => !y.IsActive))); 

     var list = new List<Article>() { new Article { IsActive=true }, new Article { IsActive = false } }; 
     var result = Mapper.Map<List<Article>, ViewAllArticles>(list); 
    } 
} 
+0

這完美地工作。 – CodeMonkey 2012-07-19 15:14:18

2
Mapper.CreateMap<IList<Article>, ViewAllArticles>() 
    .AfterMap((arts , artsvm) => 
{ 
    //var artsvm = new ViewAllArticles(); 
    artsvm.ActiveArticles = arts.Where(a=> IsActive==true).ToList(); 
    artsvm.InactiveArticles = arts.Where(a=> IsActive==false).ToList(); 
} 

你也可以做ConvertUsing,唯一的區別是,你會開始了與 new ViewAllArticles,因爲你將負責創建它。我在這裏沒有這樣做的唯一原因是因爲我不記得ConvertUsing是否允許使用多行lambda,但是我實際上會嘗試ConvertUsing,看看它是否有效。

相關問題