2015-01-20 196 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