如何使用AutoMapper实现嵌套映射并按TaskHead分组任务列表
问题原因
你当前的映射规则是把单个TaskItem直接映射为完整的TaskItemToReturnHeadDTO,所以传入N条任务就会生成N个独立的分组头部,每个分组下仅有1条任务,自然不会实现聚合效果。GroupBy分组属于业务逻辑,不需要耦合到AutoMapper配置中,直接在控制器层处理即可。
1. 修正AutoMapper配置
删除TaskItem与TaskItemToReturnHeadDTO的映射规则,仅保留单条任务的映射即可:
CreateMap<TaskItem, TaskItemToReturnDTO>().ReverseMap();
2. 调整控制器逻辑
先对查询到的任务按ItemStage分组,再将每个分组转换为返回的头部DTO结构:
[HttpGet("all")] // 修正返回值类型为实际要输出的DTO集合 public async Task<ActionResult<IEnumerable<TaskItemToReturnHeadDTO>>> GetTasks() { var tasks = await _context.TaskItems.ToListAsync(); // 按ItemStage分组后组装返回结构 var groupedTasks = tasks.GroupBy(t => t.ItemStage) .Select(g => new TaskItemToReturnHeadDTO { TaskHead = g.Key, Tasks = _mapper.Map<List<TaskItemToReturnDTO>>(g.ToList()) }) .ToList(); return Ok(groupedTasks); }
内容的提问来源于stack exchange,提问作者Matteoni
相关产品推荐
相关产品推荐

