表达式必须解析为顶级成员,而不是任何子对象';的属性

本文关键字:对象 任何 属性 成员 表达式 | 更新日期: 2023-09-27 18:21:06

我正试图将一个结构困难的对象映射到一个简单的对象:

 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));
相关文章: