我正在使用Automapper。这样,我将DTO与数据库表进行了映射。在那一种情况下,我需要检查一种情况,然后取值。
CreatedBy = mapper.Map<UserProperties>((from createdByUser in context.persons.Where(x => x.IsActive && x.Id == notes.CreatedBy) select createdByUser).FirstOrDefault())
这是我的代码。
用户属性类:
public string DisplayName { get; set; }
public int Id { get; set; }
public bool IsUser { get; set; }
public int NotesCount {get;set;}
人
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;}
下面的代码是启动文件中的自动映射器配置。
映射配置文件类
在人员中,具有字段roleId
。我需要通过检查Persons中的IsUser
字段等条件等于2,来为User属性类中的RoleId
字段分配值。
如何使用自动映射器检查条件?
自动映射器版本:9.0.0
答案 0 :(得分:1)
您需要在映射中添加一个ForMember
子句以添加条件-这是一个有效的示例(此示例花费了比原先更长的时间,因为您发布的是代码的图片而不是实际的代码。这就是为什么在SO上应该始终发布代码而不是图片的原因。)
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; }
}
输出:
错误
是
您的映射配置代码不必“知道”什么RoleID指示用户。您的Person
类应该是掌握该知识的位置,因此应该具有IsUser()
方法或仅获取的IsUser
属性(带有NotMapped
属性),该属性返回RoleId == 2
:在前一种情况下,您仍然需要ForMember
,但在后一种情况下则不需要,尽管如果您 do 从UserProperties
映射回{ {1}}您将需要一些东西来处理它-再次,它应该在Persons
类中,而不是在mapper配置中。也许Persons
设置了RoleId。