Я хочу использовать automapper для отображения между двумя списками. Один список содержит код и строку, а другой содержит код и другие поля. Я хочу использовать все существующие значения/свойства для целевого объекта, кроме одного. Возможно ли это с помощью automapper? Я не хочу указывать все свойства с помощью UseDestinationValue(). Пробовал следующее, но вместо того, чтобы вернуться мой список адресатов с одним свойством обновленной, она возвращает новый список с только совпадающих элементов (в обоих списках), и все поля равны нулю:Automapper использует свойства назначения и карту одного объекта
public static IMappingExpression<TSource, TDest> UseAllDestinationValues<TSource, TDest>(this IMappingExpression<TSource, TDest> expression)
{
expression.ForAllMembers(opt => opt.UseDestinationValue());
return expression;
}
Mapper.CreateMap<Perm, PermViewModel>()
.UseAllDestinationValues()
.ForMember(dest => dest.CanEdit, opt => opt.MapFrom(s => s.editable));
var items = Mapper.Map<List<Perm>, List<PermViewModel>>(list, model.Items.Items);
Спасибо, что выглядит многообещающим. Но это вернет новый PermViewModel. Могу ли я получить доступ к существующему целевому объекту в конверторе типов и перезаписать одно свойство? –
Он должен уметь. Это ссылочный объект, поэтому вы не видите, почему нет. Но! Я бы этого не сделал. Я бы вместо этого сделал для каждого и изменил его таким образом. – thinklarge
Я просто перечитаю ваш комментарий. Преобразователь типов может создавать и изменять что-либо на целевом объекте. В этом случае это будет PermViewModel. Это может изменить и Пермь (я думаю). Но я бы не стал изменять Пермь. Отвечает ли вам вопрос? – thinklarge