Я хочу повторно использовать инициализированные отображения c # Automapper (используя версию 6.2.2), просматривая все сопоставленные свойства.
Предположим, у меня есть следующее:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PersonDto
{
public int Id { get; set; }
public string FullName { get; set; }
}
AutoMapper.Mapper.Initialize(cfg =>
{
cfg.CreateMap<Person, PersonDto>()
.ForMember(dest => dest.FullName,
opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
};
Цикл для Id
ведет себя как ожидалось:
var map = AutoMapper.Mapper.Configuration.FindTypeMapFor<Person, PersonDto>();
foreach (var propertyMap in map.GetPropertyMaps())
{
var destProp = propertyMap.DestinationProperty.Name; // = "Id"
var sourceMember = propertyMap.SourceMember.Name; // = "Id"
var sourceMembers = propertyMap.SourceMembers; // Count = 1
}
Но когда я перебираю отображение свойства FullName
, я хочу добиться, чтобы propertyMap.SourceMembers приводил к двум SourceMembers FirstName
и LastName
:
var map = AutoMapper.Mapper.Configuration.FindTypeMapFor<Person, PersonDto>();
foreach (var propertyMap in map.GetPropertyMaps())
{
var destProp = propertyMap.DestinationProperty.Name; // = "FullName"
var sourceMember = propertyMap.SourceMember.Name; // = "LastName" (I don't care)
var sourceMembers = propertyMap.SourceMembers; // Count = 0 (want to achieve 2 for FirstName and LastName)
}
Моя цель - создать автоматическое аналогичное отображение для функциональности orderBy
на основе инициализированных отображений автоматического преобразователя.Так что мне нужно знать (а) порядок и (б) sourceMembers.В приведенном выше случае я хочу получить сопоставление для FullName
от его исходных элементов FirstName
и LastName
(в этом порядке).
Можно ли как-то правильно зарегистрировать несколько исходных элементов, чтобы propertyMap.SourceMembers
возвращает всех сопоставленных исходных элементов?Если да, как должна выглядеть инициализация карты?
PS: я не хочу писать сопоставления orderBy вручную, поскольку у меня уже есть сопоставления благодаря autopper.