AutoMapper - условное сопоставление - PullRequest
4 голосов
/ 27 апреля 2011

Я оглянулся и не смог найти ответ на свой вопрос. То, что я хочу сделать, это условное сопоставление целевого объекта (не поле / свойство, объект). Другими словами, что-то вроде этого:

public class Source
{
    public int Id {get; set;}
    public string Flag {get; set;}
}
public class Destination
{
    public int Id {get; set;}
}

var sources = new List<Source> 
                  { 
                      new Source{Flag = "V", Id = 1},
                      new Source{Flag = "B", Id = 2} 
                  };

var destinations = Mapper.Map<List<Source>, List<Destination>>(sources);

destinations.Count.ShouldEqual(1);
destinations[0].Id.ShouldEqual(2);

Кто-нибудь знает, как настроить сопоставление типов? Я ищу что-то вроде:

Mapper.CreateMap<Source, Destination>()
    .SkipIf(src => src.Flag != "B");

Я просто не вижу ничего в опциях конфигурации, которые, кажется, поддерживают это. Любая помощь приветствуется! Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 27 апреля 2011

AFAIK В настоящее время нет ничего встроенного, что позволяет вам достичь этого.Вы можете сделать следующее:

var destinations = Mapper.Map<List<Source>, List<Destination>>(
    sources.Where(source => source.Flag == "B")
);
5 голосов
/ 20 декабря 2011

Это не очень хорошо, так как вы фактически выполняете отображение самостоятельно ... но в исключительных случаях это нормально и позволяет внутренне содержать логику отображения ...

 config.CreateMap<Source, Destination>()
            .AfterMap((source, dest) =>
            {
                 if (source.Flag == "B")
                 {
                     //do stuff
                 }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...