Сопоставить свойство с элементом коллекции - PullRequest
17 голосов
/ 19 января 2011

Я просматривал документацию 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 Ответ

45 голосов
/ 20 января 2011

Я думаю, что-то вроде этого должно работать (не проверено - просто печатать вслух):

Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes,
    opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } });

РЕДАКТИРОВАНИЕ

Вы также можете использовать AutoMappersAfterMap функциональность.Эта лямбда будет выполняться после того, как Automapper выполнит свои обычные отображения:

.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...