Вам нужно добавить условие ForMember
в ваше отображение, чтобы добавить условие - вот рабочий пример (который занял больше времени, чем следовало бы, потому что вы разместили изображение своего кода вместо реального кода. Вот почемуна ТАК вы всегда должны отправлять код, а не изображения.)
void Main()
{
var mapperConfig =
new MapperConfiguration(mc => mc.AddProfile<MappingProfile>());
var mapper = mapperConfig.CreateMapper();
var notAUser = new Persons { RoleId = 1};
var isAUser = new Persons { RoleId = 2};
var shouldBeNotAUser = mapper.Map<UserProperties>(notAUser);
var shouldBeAUser = mapper.Map<UserProperties>(isAUser);
Console.WriteLine(shouldBeNotAUser.IsUser);
Console.WriteLine(shouldBeAUser.IsUser);
}
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Persons, UserProperties>()
.ForMember(destination => destination.IsUser,
options => options.MapFrom(src => src.RoleId == 2));
}
}
class UserProperties
{
public string DisplayName { get; set; }
public int Id { get; set; }
public bool IsUser { get; set; }
public int NotesCount { get; set; }
}
class Persons
{
public string DisplayName { get; set; }
public int Id { get; set; }
public int RoleId { get; set; }
public int NotesCount { get; set; }
public string Notes { get; set; }
public string Comments { get; set; }
}
Вывод:
FalseTrue
Однако
Код конфигурации сопоставления не должен «знать», что RoleID указывает на пользователя.Ваш класс Person
должен находиться там, где хранятся эти знания, поэтому он должен иметь либо метод IsUser()
, либо свойство IsUser
только для получения (с атрибутом NotMapped
), которое возвращает RoleId == 2
: в первом случаевам все равно понадобится ForMember
, но в последнем случае вы этого не сделаете, хотя, если вы делаете отображаете обратно с UserProperties
на Persons
, вам нужно что-то там, чтобы справиться с этим - опять же, это должнобыть в классе Persons
, а не в конфигурации маппера.Может быть SetAsUser()
, который устанавливает RoleId.