AutoMapper: как сопоставить коллекцию объектов в Pairколлекция - PullRequest
0 голосов
/ 25 мая 2019

Исходный класс:

public partial class Carrier 
{
    public virtual ICollection<Driver> Drivers { get => _drivers ?? (_drivers = new List<Driver>()); protected set => _drivers = value; }

, где Driver:

public partial class Driver 
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

Класс назначения:

public class CarrierDto
{
    public List<Pair<int, string>> Drivers { get; set; }

Я делаю это вручную:

            new CarrierDto
            {
                //...
                Drivers = p.Drivers.Select(d => new Pair<int, string> { Text = d.FirstName + " " + d.LastName, Value = d.Id }).ToList(),

Как сопоставить Drivers свойство с помощью Automapper?

public class AutoMapperEfCarrier : AutoMapper.Profile
{
    public AutoMapperEfCarrier()
    {
        CreateMap<Carrier, CarrierDto>()
            .ForMember(dest => dest.Drivers, opt => ?????)
            ;
    }

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Вам просто нужно создать карту от Driver до Pair<int, string>:

public class AutoMapperEfCarrier : AutoMapper.Profile
{
    public AutoMapperEfCarrier()
    {
        CreateMap<Carrier, CarrierDto>(); // no need to specify Drivers mapping because the property name is the same

        // those below are just examples, use the correct mapping for your class

        // example 1: property mapping
        CreateMap<Driver, Pair<int, string>>()
            .ForMember(p => p.Value, c => c.MapFrom(s => s.Id))
            .ForMember(p => p.Text, c => c.MapFrom(s => s.FirstName + " " + s.LastName));

        // example 2: constructor mapping
        CreateMap<Driver, Pair<int, string>>()
            .ConstructUsing(d=> new Pair<int, string>(d.Id, d.LastName));
    }
}
0 голосов
/ 25 мая 2019

Я реализовал это кстати:

            .ForMember(dest => dest.Drivers, opt => opt.MapFrom(src => src.Drivers.Select( d=> new Pair<int, string>() { Value = d.Id, Text = $"{d.FirstName} {d.LastName}" }).ToList()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...