2014-12-30 164 views
0

我正在製作論壇系統,我有SubCategoryThreadsViewModel我試圖映射LastComment和每個線程的最後發佈日期。這是我的代碼:Automapper - 如何映射到IEnumerable

public class SubCategoryThreadsViewModel : IHaveCustomMappings 
{ 
    public string Title { get; set; } 

    public string Description { get; set; } 

    public IEnumerable<Thread> Threads { get; set; } 

    public ThreadInfoSubCategoryViewModel ThreadInfoSubCategoryViewModel { get; set; } 

    public void CreateMappings(IConfiguration configuration) 
    { 
     configuration.CreateMap<Thread, SubCategoryThreadsViewModel>() 
      .ForMember(m => m.Title, opt => opt.MapFrom(t => t.SubCategory.Title)) 
      .ForMember(m => m.Description, opt => opt.MapFrom(t => t.SubCategory.Description)) 
      .ForMember(m => m.Threads, opt => opt.MapFrom(t => t.SubCategory.Threads)) 
      .ForMember(m => m.ThreadInfoSubCategoryViewModel, opt => opt.MapFrom(t => new ThreadInfoSubCategoryViewModel() 
      { 
        LastCommentBy = t.Posts.Select(a => a.Author.UserName), 
        DateOfLastPost = t.Posts.Select(a => a.CreatedOn.ToString()), 
      })) 
      .ReverseMap(); 
    } 

代碼

.ForMember(m => m.ThreadInfoSubCategoryViewModel, opt => opt.MapFrom(t => new ThreadInfoSubCategoryViewModel() 
     { 
       LastCommentBy = t.Posts.Select(a => a.Author.UserName), 
       DateOfLastPost = t.Posts.Select(a => a.CreatedOn.ToString()), 
     })) 

工作,但只有當財產ThreadInfoSubCategoryViewModel不是IEnumerable的在上面的代碼,裏面有兩個IEnumerable的字符串。

public class ThreadInfoSubCategoryViewModel 
    { 
     public IEnumerable<string> LastCommentBy { get; set; } 

     public IEnumerable<string> DateOfLastPost { get; set; } 
    } 

這工作,但我想ThreadInfoSubCategoryViewModel是IEnumerable的,並在類屬性是很容易的foreach字符串。

我試圖讓它IEnumerable,但與當前automapper代碼它不起作用。

回答

0

您需要手動將該成員映射到IEnumerable<ThreadInfoSubCategoryViewModel>而不是單個對象。

我承擔t.Posts每個Post代表一個ThreadInfoSubCategoryViewModel,所以一個簡單的Select()應該這樣做:

public IEnumerable<ThreadInfoSubCategoryViewModel> ThreadInfoSubCategoryViewModel { get; set; } 

... 

.ForMember(m => m.ThreadInfoSubCategoryViewModel, opt => opt.MapFrom(t => 
    t.Posts.Select(p => new ThreadInfoSubCategoryViewModel() 
    { 
     LastCommentBy = p.Author.UserName, 
     DateOfLastPost = p.CreatedOn.ToString() 
    }) 
)) 
+0

這不是工作,只給了我一個日期和一個lastComment,我想這方面的資料,每線 – Producenta