Automapper - сопоставить список с объектом на основе значения в существующем пункте назначения - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь взять уже существующий объект и использовать automapper для сопоставления другого свойства из списка в него на основе ключа, уже находящегося в месте назначения.

Учитывая приведенный ниже фрагмент кода, описание состояния Resolve получит только StateCode, и мне нужно сопоставить StateName из списка состояний в объект.

public Location ResolveStateDescription(Location location) 
{
    var stateList = new List<State> {
        new State { StateCode = "CA", StateName = "California" },
        new State { StateCode = "CO", StateName = "Colorado" },
        new State { StateCode = "NV", StateName = "Nevada" },
    };

    var mappedLocation = _mapper.Map(stateList, location);

    return mappedLocation;
}

public class State 
{
    public string StateCode { get; set; }
    public string StateName { get; set; }
}

public class Location 
{
    public string City { get; set; }
    public string StateCode { get; set; }
    public string StateName { get; set; }
} 

Я уже сделал поэтому, используя Custom Resolver и профиль ниже. Мне интересно, есть ли более простой способ сделать это без особых накладных расходов.

public class StateMapProfile : Profile 
{
    public StateMapProfile() 
    {
        CreateMap<List<State>, Location>()
            .ForMember (dest => dest.StateName, opt => opt.MapFrom<StateCodeResolver>());
    }
}

public class StateCodeResolver : IValueResolver<IEnumerable<State>, Location, string> 
{
    public string Resolve(IEnumerable<State> source, Location destination, string destMember,
        ResolutionContext context) 
    {
        return source
            .Where(x => x.StateCode.Equals(destination.StateCode))
            .Select(x => x.StateName).FirstOrDefault();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...