2016-01-26 3 views
0

Я пытаюсь объединить два разных входа в один выход с помощью AutoMapper.Включает один и тот же класс источника, разные входы. Тот же выход. Является ли это возможным?

List<MerchantListViewModel> merchants = new List<MerchantListViewModel>(); 

var regularMerchants = Mapper.Map<List<Discount>, List<MerchantListViewModel>>(result.RegularDiscounts); 
var specialMerchants = Mapper.Map<List<Discount>, List<MerchantListViewModel>>(result.OurSpecialDiscounts); 

merchants.AddRange(regularMerchants); 
merchants.AddRange(specialMerchants); 

return merchants; 


public class MerchantListViewModel 
{ 
    ... 
    public bool IsSpecialDiscount { get; set; } 
} 

Я хочу, чтобы установить флаг на MerchantListViewModel к IsSpecialDiscount, чтобы быть правдой, когда происходит вторая карта. Первая карта установит его в значение false или не установит. Есть ли способ сделать это? Я представляю код Legacy в новые ViewModels, откуда это требование исходит. У меня нет возможности изменить устаревший код из двух списков, которые мне даны.

Заранее благодарен!

+0

Возможно, вы можете добавить эту строку, прежде чем вы вызовете функцию AddRange. specialMerchants.ForEach (li => ii.IsSpecialDiscount = true). Или вы ищете только решение на основе automapper? –

+0

Это хороший момент, не думал об этом именно так. Благодаря! – EvilToaster101

ответ

0

Вы можете использовать .AfterMap() действие за https://github.com/AutoMapper/AutoMapper/wiki/Before-and-after-map-actions Я не уверен в значениях ваших объектов, поэтому вы можете или не сможете это сделать в своей конфигурации. Выполнение действия во время сопоставления будет примерно эквивалентным использованию LINQ .ForEach(), как указано в комментариях. У вас также может быть возможность проката собственного класса ValueResolver, например https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers

Смежные вопросы