我想獲得按TaskHead分組的任務串列,其中包括任務串列。
TaskItemToReturnHeadDTO.TaskHead == TaskItemToReturnDTO.ItemStage
Entity
public class TaskItem
{
[Key] 。
public int TaskItemId { get; set; }
public string Name { get; set; }
public string ItemStage { get; set; }
DTOs
public class TaskItemToReturnHeadDTO
{
public string TaskHead { get; set; }
public ICollection<TaskItemToReturnDTO> Tasks { get; set; }
public class TaskItemToReturnDTO
{
public int TaskItemId { get; set; }
public string Name { get; set; }
public string ItemStage { get; set; }
控制器
[HttpGet("all")]
public async Task<ActionResult<ICollection<TaskItem>>GetTasks()
{
var tasks = await _context.TaskItems.ToListAsync()。
var mappedTasks = _mapper.Map<IEnumerable<TaskItemToReturnHeadDTO>>(tasks)。
return Ok(mappedTasks);
}
AutoMapper簡介
CreateMap<TaskItem, TaskItemToReturnDTO> ().ReverseMap();
CreateMap<TaskItemToReturnHeadDTO, TaskItem>().ReverseMap()
.ForMember(dto => dto.TaskHead, c => c.MapFrom(c => c.ItemStage)
.ForMember(dto => dto.Tasks, c => c.MapFrom(c => new List< TaskItemToReturnDTO> { new TaskItemToReturnDTO
{
TaskItemId = c.TaskItemId,
Name = c.Name,
ItemStage = c.ItemStage
}}));
這是我目前的結果,但任務沒有被分組。
這是我目前的結果,但任務沒有被分組。
[
{
"taskHead"。"設計完成"。
"tasks": [
{
"taskItemId": 1,
"name": "Issuing",
"itemStage": "設計完成", "專案階段": "設計完成"
}
]
},
{
"taskHead": "設計完成",
"tasks": [
{
"taskItemId": 2,
"name": "Issuing",
"itemStage": "設計完成", "專案階段": "設計完成"
}
]
},
{
"taskHead": "正在檢查的設計"。
"tasks": [
{
"taskItemId": 4,
"name": "SF Joists",
" itemStage": "正在檢查的設計"。
}
]
},
{
"taskHead": "正在檢查的設計"。
"tasks": [
{
"taskItemId": 5,
"name": "FF桁架",
" itemStage": "正在檢查的設計"。
}
]
},
{
"taskHead": "正在發布"。
"任務": [
{
"taskItemId": 6,
"name": "Roof",
"itemStage": "正在發行", "專案階段": "正在發行"
下面我展示了它應該是什么樣子的。這是我的目標。
[
{
"taskHead"/span>。"設計完成"。
"tasks": [
{
"taskItemId": 1,
"name": "Issuing",
"itemStage": "設計完成"。
},
{
"taskItemId": 2,
"name": "Issuing",
"itemStage": "設計完成", "專案階段": "設計完成"
}
]
},
{
"taskHead": "正在檢查的設計"。
"tasks": [
{
"taskItemId": 4,
"name": "SF Joists",
" itemStage": "正在檢查的設計"。
},
{
"taskItemId": 5,
"name": "FF桁架",
" itemStage": "正在檢查的設計"。
}
]
},
{
"taskHead": "正在發布"。
"任務": [
{
"taskItemId": 6,
"name": "Roof",
"itemStage": "正在發行", "專案階段": "正在發行"
我認為我應該在某個地方使用GroupBy函式,但我不知道在哪里以及如何使用。也許我有錯誤的映射?
uj5u.com熱心網友回復:
Automapper對于TaskItemToReturnDTO來說很好用,但是你不需要為TaskItemToReturnHeadDTO制作一個mapper。相反,在映射之后使用linq進行分組,如下所示:
var mappedTasks = _mapper.Map<IEnumerable<TaskItemToReturnDTO>> (tasks)。
var groupedTasks = mappedTasks
.GroupBy(task => task.ItemStage)
.Select(group => new TaskItemToReturnHeadDTO { TaskHead = group.Key, Tasks = group.ToList() }) 。
uj5u.com熱心網友回復:
@Oignon_Rouge 謝謝你,已經用相當類似的代碼弄明白了......你能檢查一下我的版本是否正常嗎?對我來說很好:)
[HttpGet("all")]
public async Task<ActionResult<ICollection<TaskItem>>GetTasks()
{
var tasks = await _context.TaskItems.ToListAsync()。
var mappedTasks = _mapper.Map<IEnumerable<TaskItemToReturnHeadDTO>>(tasks)。
var groupedTasks = mappedTasks.GroupBy(z => z.TaskHead).Select(v => new TaskItemToReturnHeadDTO
{
TaskHead = v.Key,
Tasks = _mapper.Map<ICollection<TaskItemToReturnDTO>>(tasks).Where(x => x.ItemStage == v.Key).ToList()
});
return Ok(groupedTasks)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309852.html
標籤:
