Сопоставление свойства с элементом коллекции
Я просачивался через документацию AutoMapper, чтобы попытаться найти рекомендуемое решение для этого, но не смог его найти.
Скажем, у меня есть класс, подобный следующему
public class Foo
{
public string Note { get; set; }
}
этот класс заполняется из клиента и сопоставляется со следующим классом объектов домена
public class Bar
{
public IList<Note> Notes { get; set; }
}
где Примечание
public class Note
{
public string Text { get; set; }
// other properties excluded for brevity
}
Я хотел бы сопоставить свойство строки Note
на Foo
, прежде всего с атрибутом Text
в новом экземпляре Note
, а затем добавить, что Note
в коллекцию Notes
на Bar
. Я использую ValueResolver
для выполнения первой части этой операции (сопоставление строки с новым экземпляром Note
), но я не уверен, как обойти вторую часть (сопоставление этого элемента с элементом в сбор).
Какой самый чистый способ сделать это?
Ответы
Ответ 1
Я думаю, что что-то вроде этого должно работать (не проверено - просто печатайте вслух):
Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes,
opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } });
ИЗМЕНИТЬ
Вы также можете использовать функции AutoMappers AfterMap
. Эта лямбда будет выполнена после того, как Automapper выполнил бы ее регулярные сопоставления:
.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note }));