2015-01-20 271 views
0

我需要使用AutoMapper將模型映射到視圖模型。Automapper映射問題

型號:

[Table("News")] 
public class News 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public DateTime DatePostedOn { get; set; } 
    public int Position { get; set; } 
    public Category Category { get; set; } 
    public virtual ICollection<Picture> Pictures { get; set; } 
} 

[Table("Pictures")] 
public class Picture 
{ 
    [Key] 
    public int Id { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Filename { get; set; } 
    public int Type { get; set; } 
    public virtual ICollection<News> News { get; set; } 
} 

視圖模型:

public class HomeViewModels 
{ 
    public IList<HomeMainNews> MainNews { get; private set; } 
} 

public class HomeMainNews 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Date { get; set; } 
    public string PictureURL { get; set; } 
} 

映射:

Mapper.CreateMap<News, HomeMainNews>(); 

我該如何映射有一組圖片的新聞,在視圖模型只有一個圖片根據一定條件「Type = 2」

目前的解決方案:

vm.MainNews = db.News 
       .Select(n => new HomeMainNews { 
           Id = n.Id, 
           Date = n.DatePostedOn.ToString(), 
           Title = n.Title, 
           PictureURL = n.Pictures.Where(p => p.Type == 1).Select(p => p.Filename).FirstOrDefault().ToString() 
         }).ToList(); 

Automapper解決方案:

vm.MainNews = db.News.Project().To<HomeMainNews>().ToList(); 
+1

對於這麼簡單的東西(4場在你的虛擬機),我不會爲此特別是如果使用Automapper其中一個領域有一些定製工作。你可以簡單地使用'HomeViewModels view = new HomeViewModels(MainNews = news.Select(Map))'其中Map是一個駐留在控制器中的方法,返回映射這3個基本字段和第4個字段周圍邏輯的HomeMainNews。 – wal 2015-01-20 23:47:38

+0

嗨,謝謝。你能分享一個例子嗎? – Patrick 2015-01-21 00:21:25

+0

你試過了什麼?我不能僅僅爲你提供一個例子。我在第一條評論中給出了基本結構 – wal 2015-01-21 00:33:26

回答

2

試試這個

Mapper.CreateMap<News, HomeMainNews>() 
      .ForMember(mainNew => mainNew.Date, opt => opt.MapFrom(news => news.DatePostedOn)) 
      .ForMember(mainNew => mainNew.PictureURL, opt => opt.MapFrom(news => news.Pictures.First(pic => pic.Type == 2).Filename)); 
+0

嗨,謝謝。讓我試試... – Patrick 2015-01-21 10:44:13

+0

它工作正常!大!關於我的Linq查詢的性能怎麼樣? – Patrick 2015-01-21 11:57:16

+0

檢查SQL以找出答案。它與LINQ沒有多大區別。 – 2015-01-21 20:59:38