Как сделать карту из коллекции? Авто картограф - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть объект linq to sql, который имеет некоторые ссылки на некоторые другие таблицы

Я пытаюсь сопоставить его с виртуальной машиной, но ничто никогда не получает захваты.

Mapper.CreateMap<A, G>();


// A is the linq to sql object
A.MyList // this is a collection that I am trying to get the value out of A.MyList.Id

// G is my View Model
public class G
{
   public string AMyListId {get; set;}

}


 vm = Mapper.Map<List<A>, List<G>>(aListOfAFromDb);

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

Mapper.CreateMap<A, G>().ForMember(dest => dest.AMyList , opt => opt.MapFrom(src =>????));

, но, так как я получаю его из списка, он не дает никаких свойств для выбора.

Редактировать

Я понял, что у меня не должно быть списка «MyList», это должен быть один к одному.У меня все еще возникают проблемы при попытке сделать то, что я хочу.

У меня есть это

Mapper.CreateMap ();

A.Vip.UserId // again my linq object is A

// G is my View Model
public class G
{
   public string IsVip {get; set;}

}


 vm = Mapper.Map<List<A>, List<G>>(aListOfAFromDb);

 Mapper.CreateMap<A, G>().ForMember(dest => dest.IsVip, opt => opt.AddFormatter<VipFormatter>());


public class VipFormatter : IValueFormatter
    {
        public string FormatValue(ResolutionContext context)
        {
            bool value = (bool)context.SourceValue;

            if (value)
            {
                return "Yes";
            }


            return "No";

        }
    }

, но ничто не связывает каждого.Я не уверен почему.Должен ли я изменить свое свойство на «AVipUserId»?Или как-то сказать это на карту?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2011

Из того, что я вижу в вашем коде, и в дополнение к моему комментарию выше, вам не нужен AutoMapper для этого:

List<A> dbItems;
IEnumerable<G> results = dbItems.Select(x => x.MyList.MyListID);

На самом деле вы не можете отобразить A на G, потому что вы собираетесь создать несколько объектов "G" для каждого объекта "A".

Дайте мне знать, если я неправильно понял вопрос здесь.

UPDATE:

Я бы изменил «G» на логическое свойство, а затем сделал бы следующее:

Mapper.CreateMap<A, G>().ForMember(dest => dest.IsVip, opt => opt.MapFrom(src => src.Vip == null));

Или, какую бы логику вы использовали, чтобы определить, является ли это VIP или нет.

2 голосов
/ 24 февраля 2011

Как насчет:

List<G> items = // whatever
var result = items.Select(g => Mapper.Map<G, A>(g));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...