表达式必须解析为 top-level 成员而不是任何 child object 的属性
Expression must resolve to top-level member and not any child object's properties
我正在尝试将具有复杂结构的 object 映射到简单的 object:
public class Contact
{
public string ContactName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}
public class Phone
{
public string Number { get; set; }
public PhoneType Type { get; set; }
}
public enum PhoneType
{
Phone,
Mobile
}
public class ContactDto
{
public string ContactName { get; set; }
public string PhoneNumber { get; set; }
public string MobileNumber { get; set; }
}
Mapper.CreateMap<ContactDto, Contact>()
.ForMember(p => p.Phones.FirstOrDefault(k => k.Type.Equals(PhoneType.Mobile)).Number, r => r.MapFrom(s => s.MobileNumber))
.ForMember(p => p.Phones.FirstOrDefault(k => k.Type.Equals(PhoneType.Phone)).Number, r => r.MapFrom(s => s.PhoneNumber));
但是我的标题有误。怎么了?
您的通用参数顺序错误。源应该是第一个,目的地是后者。
试试这个:
Mapper.CreateMap<Contact, ContactDto>()
.ForMember(dto => dto.PhoneNumber, dto => dto.MapFrom(src => src.Phones.First(p => p.Type == PhoneType.Phone).Number))
.ForMember(dto => dto.MobileNumber, dto => dto.MapFrom(src => src.Phones.First(p => p.Type == PhoneType.Mobile).Number));
我正在尝试将具有复杂结构的 object 映射到简单的 object:
public class Contact
{
public string ContactName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}
public class Phone
{
public string Number { get; set; }
public PhoneType Type { get; set; }
}
public enum PhoneType
{
Phone,
Mobile
}
public class ContactDto
{
public string ContactName { get; set; }
public string PhoneNumber { get; set; }
public string MobileNumber { get; set; }
}
Mapper.CreateMap<ContactDto, Contact>()
.ForMember(p => p.Phones.FirstOrDefault(k => k.Type.Equals(PhoneType.Mobile)).Number, r => r.MapFrom(s => s.MobileNumber))
.ForMember(p => p.Phones.FirstOrDefault(k => k.Type.Equals(PhoneType.Phone)).Number, r => r.MapFrom(s => s.PhoneNumber));
但是我的标题有误。怎么了?
您的通用参数顺序错误。源应该是第一个,目的地是后者。
试试这个:
Mapper.CreateMap<Contact, ContactDto>()
.ForMember(dto => dto.PhoneNumber, dto => dto.MapFrom(src => src.Phones.First(p => p.Type == PhoneType.Phone).Number))
.ForMember(dto => dto.MobileNumber, dto => dto.MapFrom(src => src.Phones.First(p => p.Type == PhoneType.Mobile).Number));