public async Task <ApprovalDetailsRespObj> GetApprovalDetailsAsync(int targetId, string workflowToken) { var list = await _dataContext.cor_approvaldetail.Where(a => a.TargetId == targetId && a.WorkflowToken == workflowToken).ToListAsync(); var StaffResponse = await _serverRequest.GetAllStaff(); var response = new ApprovalDetailsRespObj { Status = new APIResponseStatus { IsSuccessful = true, Message = new APIResponseMessage() } }; if (!StaffResponse.IsSuccessStatusCode) { response.Status.IsSuccessful = false; response.Status.Message.FriendlyMessage = StaffResponse.ReasonPhrase; return(response); } var stringData = await StaffResponse.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <ApprovalDetailsRespObj>(stringData); if (!result.Status.IsSuccessful) { response.Status = result.Status; return(response); } var temp = list; var previousStaff = temp.GroupBy(d => d.StaffId).Select(d => d.First()).Where(d => d.StatusId == (int)ApprovalStatus.Approved && d.TargetId == targetId && d.WorkflowToken == workflowToken).ToArray(); response.AprovalDetails = list.Select(x => new AprovalDetailsObj() { ApprovalDetailId = x.ApprovalDetailId, Comment = x.Comment, Date = x.Date, StaffId = x.StaffId, FirstName = result.staff.FirstOrDefault(d => d.StaffId == x.StaffId)?.FirstName, LastName = result.staff.FirstOrDefault(d => d.StaffId == x.StaffId)?.LastName, StatusId = x.StatusId, StatusName = Convert.ToString((ApprovalStatus)x.StatusId), TargetId = x.TargetId, WorkflowToken = x.WorkflowToken, }).ToList(); response.PreviousStaff = previousStaff.Select(p => new PreviousStaff { StaffId = p.StaffId, Name = $"{result.staff.FirstOrDefault(d => d.StaffId == p.StaffId)?.FirstName} {result.staff.FirstOrDefault(d => d.StaffId == p.StaffId)?.LastName}", }).ToList(); return(response); }