public PaginationQueryDto Query(PaginationQueryTaskStatusInput input)
        {
            if (input == null)
            {
                throw new ArgumentNullException($"{nameof(input)} should not be null.");
            }
            PaginationQueryDto output;

            var status  = input.Status?.ToLower();
            var keyword = input.Keyword?.ToLower();

            List <Core.Entities.Task>       tasks;
            List <string>                   taskIds;
            List <Core.Entities.TaskStatus> taskStatuses;

            Expression <Func <Core.Entities.TaskStatus, bool> > where = null;

            if (string.IsNullOrWhiteSpace(keyword))
            {
                if (!string.IsNullOrEmpty(status) && "all" != status)
                {
                    where = d => d.Status.ToLower() == status;
                }
                output       = DbContext.TaskStatus.PageList <Core.Entities.TaskStatus, long, long>(input, where, d => d.Id);
                taskStatuses = (List <Core.Entities.TaskStatus>)output.Result;
                taskIds      = taskStatuses.Select(t => t.TaskId).ToList();
                var ids = taskIds;
                tasks = DbContext.Task.Where(t => ids.Contains(t.Id)).ToList();
            }
            else
            {
                tasks   = DbContext.Task.Where(t => t.Name.ToLower().Contains(keyword)).ToList();
                taskIds = tasks.Select(t => t.Id).ToList();
                if (!string.IsNullOrEmpty(status) && "all" != status)
                {
                    var ids = taskIds;
                    where = d => d.Status.ToLower() == status && ids.Contains(d.TaskId);
                }
                else
                {
                    var ids = taskIds;
                    where = d => ids.Contains(d.TaskId);
                }
                output       = DbContext.TaskStatus.PageList <Core.Entities.TaskStatus, long, long>(input, where, d => d.Id);
                taskStatuses = (List <Core.Entities.TaskStatus>)output.Result;
            }
            var taskStatusOutputs = new List <TaskStatusDto>();

            foreach (var taskStatus in taskStatuses)
            {
                var taskStatusOutput = new TaskStatusDto();
                taskStatusOutput.Name                 = tasks.FirstOrDefault(t => t.Id == taskStatus.TaskId)?.Name;
                taskStatusOutput.AvgDownloadSpeed     = taskStatus.AvgDownloadSpeed;
                taskStatusOutput.AvgPipelineSpeed     = taskStatus.AvgDownloadSpeed;
                taskStatusOutput.AvgProcessorSpeed    = taskStatus.AvgDownloadSpeed;
                taskStatusOutput.Error                = taskStatus.Error;
                taskStatusOutput.Identity             = taskStatus.Identity;
                taskStatusOutput.LastModificationTime = taskStatus.LastModificationTime?.ToString("yyyy/MM/dd HH:mm:ss");
                taskStatusOutput.Left                 = taskStatus.Left;
                taskStatusOutput.NodeId               = taskStatus.NodeId;
                taskStatusOutput.Status               = taskStatus.Status;
                taskStatusOutput.Success              = taskStatus.Success;
                taskStatusOutput.TaskId               = taskStatus.TaskId;
                taskStatusOutput.Thread               = taskStatus.Thread;
                taskStatusOutput.Total                = taskStatus.Total;
                taskStatusOutputs.Add(taskStatusOutput);
            }
            output.Result = taskStatusOutputs;
            return(output);
        }
 public IActionResult Find([FromQuery] PaginationQueryTaskStatusInput input)
 {
     return(Success(_taskStatusAppService.Query(input)));
 }