You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AutoMapper将Customer列表映射为含Hobbies的Person列表

解决AutoMapper映射Customer列表到带Hobbies的Person列表问题

1. 先明确类结构与映射前提

先假设你的类结构大致如下(如果实际结构不同,可对应调整映射逻辑):

// 原始Customer类
public class Customer
{
    public int PersonId { get; set; }
    public string PersonName { get; set; }
    // 单个Customer对应单个爱好信息,或包含爱好集合
    public int HobbyId { get; set; }
    public string HobbyName { get; set; }
    // 或者如果一个Customer带多个爱好:public List<CustomerHobby> CustomerHobbies { get; set; }
}

// 目标Person类
public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Hobby> Hobbies { get; set; }
}

// Hobby类
public class Hobby
{
    public int Id { get; set; }
    public string Name { get; set; }
}

2. 分场景处理映射逻辑

场景一:Customer列表中,同一Person对应多条记录(每条对应一个Hobby)

这种情况下需要先按Person的唯一标识(比如PersonId)分组,再合并Hobbies:

// 1. 按PersonId分组Customer
var groupedCustomers = customers.GroupBy(c => c.PersonId);

// 2. 遍历分组映射成Person对象
var persons = groupedCustomers.Select(group => 
{
    // 取分组内第一条数据映射基础Person信息
    var person = _mapper.Map<Person>(group.First());
    // 将分组内所有Customer映射为Hobby列表
    person.Hobbies = _mapper.Map<List<Hobby>>(group.ToList());
    return person;
}).ToList();

场景二:单个Customer本身包含多个Hobby的集合(比如CustomerHobbies属性)

这种情况直接在AutoMapper配置中指定Hobbies字段的来源即可:

// 定义映射Profile
public class AppMappingProfile : Profile
{
    public AppMappingProfile()
    {
        // Customer到Person的映射,指定Hobbies从CustomerHobbies映射
        CreateMap<Customer, Person>()
            .ForMember(dest => dest.Hobbies, opt => opt.MapFrom(src => src.CustomerHobbies));
        
        // 配置CustomerHobby到Hobby的映射
        CreateMap<CustomerHobby, Hobby>();
    }
}

之后直接调用以下代码即可完成映射:

var persons = _mapper.Map<List<Person>>(customers);

3. 验证映射结果

映射完成后,可通过调试或打印输出,检查每个Person对象的Hobbies字段是否正确填充了对应的数据,确保映射逻辑符合预期。


内容的提问来源于stack exchange,提问作者blankface

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:05:43