繁体   English   中英

Automapper-如何映射到IEnumerable

[英]Automapper - How to map to IEnumerable

我正在制作论坛系统,我有SubCategoryThreadsViewModel,我试图在其中映射每个线程的LastComment和最后发布日期。 这是我的代码:

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字符串。

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

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

这可行,但是我希望ThreadInfoSubCategoryViewModel是可枚举的,并且在类属性中是字符串,以便于foreach。

我试图使其成为IEnumerable,但是使用当前的自动映射器代码无法正常工作。

您需要手动将成员映射到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()
    })
))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM