加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何将Mapper.Map与ConstructUsing和AutoMapper一起使用?

发布时间:2020-12-15 23:30:26 所属栏目:百科 来源:网络整理
导读:我有一个简单的问题:如何在ConstructUsing中使用Mapper.Map?我正在使用AutoMapper v4.1.1,我有这个代码,我想通过重用代码来清理它. Mapper.CreateMapSKU,SKUViewModel() .ConstructUsing(m = new SKUViewModel((from texts in m.DescriptionTranslation.Tr
我有一个简单的问题:如何在ConstructUsing中使用Mapper.Map?我正在使用AutoMapper v4.1.1,我有这个代码,我想通过重用代码来清理它.

Mapper.CreateMap<SKU,SKUViewModel>()
                .ConstructUsing(m => new SKUViewModel((from texts in m.DescriptionTranslation.TranslationTexts
                                                       select new TranslationTuple
                                                       {
                                                           LanguageId = texts.LanguageId,LanguageDisplayName = texts.Language.DisplayName,TranslationText = texts.Text,NeutralText = texts.NeutralText,ThreeLetterIsoLanguageName = texts.Language.ThreeLetterISOLanguageName
                                                       }).ToList(),(from texts in m.DisplayNameTranslation.TranslationTexts
                                                     select new TranslationTuple
                                                     {
                                                         LanguageId = texts.LanguageId,ThreeLetterIsoLanguageName = texts.Language.ThreeLetterISOLanguageName
                                                     }).ToList(),(from texts in m.PaypalDescriptionTranslation.TranslationTexts
                                                     select new TranslationTuple
                                                     {
                                                         LanguageId = texts.LanguageId,ThreeLetterIsoLanguageName = texts.Language.ThreeLetterISOLanguageName
                                                     }).ToList()
                                                    ));

我知道我们可以像这样使用Mapper.Map和AfterMap方法.AfterMap((s,d)=> Mapper.Map(s.CompanyProfile,d));

但是我无法在ConstructUsing中做同样的事情.

有什么建议吗?

大卫

解决方法

由于您为这些实体定义了映射,因此可以在其上调用Mapper.Map.样品:

Mapper.CreateMap<SKU,SKUViewModel>()
                .ConstructUsing(m => 
                            {
                                var descriptions = Mapper.Map<List<TranslationTuple>>(m.DescriptionTranslation.TranslationTexts);
                                var displays = Mapper.Map<List<TranslationTuple>>(m.DisplayNameTranslation.TranslationTexts);
                                var paypals = Mapper.Map<List<TranslationTuple>>(m.PaypalDescriptionTranslation.TranslationTexts);

                                return new SKUViewModel(descriptions,displays,paypals);
                            });

然后,当您需要创建一个由automapper映射的对象时,只需使用:

var viewModel = Mapper.Map<List<SKUViewModel>>(sku);

像ConstructUsing,AfterMap,BeforeMap这样的方法是在完成所有定义后执行的方法.因此,遵循这个逻辑,它应该执行Mapper.Map<>没有问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读