automapper - 使用 AutoMapper 从列表映射到对象

标签 automapper

我是 AutoMapper 的新手,有一个我正在尝试解决的问题。

如果我有这样的源类:

public class Membership
{
    public int MembershipId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string OrganizationName { get; set; }
    public List<Address> Addresses { get; set; }
}

地址类如下所示:

public class Address
{
    public int AddressId{ get; set; }
    public int RefAddressTypeId { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public bool IsPreferredAddress { get; set; }
}

我的目标类(class)是:

public class UserInformationModel
{
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Organization { get; set; }
    public string EmailAddress { get; set; }
    public PhysicalAddress BillingAddress { get; set; }
    public PhysicalAddress ShippingAddress { get; set; }
}

目标地址类是:

public class PhysicalAddress
{
    public AddressType AddressType{get; set;}
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }

}

我已经设置了这样的映射:

Mapper.CreateMap<MinistryMattersIntegration.BusinessObjects.Entities.Cokesbury.Membership, UserInformationModel>()
      .ForMember(dest => dest.Organization, opt => opt.MapFrom(src=>src.OrganizationName));

这适用于 UserInformationModel 的 Membership,但现在我需要让地址正常工作。但是,需要注意的一件重要事情是,目的地是单个帐单地址和单个送货地址,而在原始模型中,所有地址都存储为列表。从列表中查找送货地址和账单地址的方法是查看 RefAddressTypdId 和 IsPreferredAddress。可能只存在一个具有特定 RefAddressTypeId 的首选地址。

所以,我的问题是,你如何让 AutoMapper 做这种映射?有可能吗,还是我最好只使用常规映射代码?

最佳答案

您需要使用 Custom Value Resolvers AutoMapper 的功能。因此,您需要设置一个自定义解析器,以使用 IsPreferredAddress 标志从您的列表映射到您的单个实体来查找它。

该文档对于自定义解析器非常有用,因此您应该可以从那里弄清楚它。

关于automapper - 使用 AutoMapper 从列表映射到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3471333/

相关文章:

tfs - 仅在 TFS 构建中出现 NSubstitute 参数匹配器错误

c# - 使用反射双向自动映射所有域实体以查看 MVC3 中的模型

c# - Automapper:将 int 转换为字符串

c# - AutoMapper 问题和映射 IEnumerable 集合

c# - AutoMapper 能否为 "persuaded"以暂时中止特定映射?

c# - AutoMapper 给出无效操作异常

automapper - 将 Umbraco 节点映射到强类型对象

Automapper - 将 NameValueCollection 转换为强类型集合

c# - 自动映射器映射对象

c# - 使用 AutoMapper 展平嵌套对象的更好方法?