public override Task <GetStudentDetailsResponse> GetStudentDetails(GetStudentDetailsRequest request, ServerCallContext context) { var student = StudentsService.GetStudentDetails(Guid.Parse(request.Id)); var allCourses = student.Grades.Select(g => g.Course).Distinct(); var grades = new List <GradeMessage>(); foreach (var course in allCourses) { var grade = new GradeMessage() { CourseName = course.Name, CourseId = course.Id.ToString(), }; grade.Marks.AddRange(student.Grades.Where(g => g.CourseId == course.Id).Select(g => g.Mark).ToList()); grades.Add(grade); } grades = grades.OrderBy(g => g.CourseName).ToList(); var response = new GetStudentDetailsResponse() { Id = student.Id.ToString(), YearOfBirth = student.YearOfBirth, Address = student.Address, Name = student.Name }; response.Grades.AddRange(grades); return(Task.FromResult(response)); }
public async Task <StudentDetailsModel> GetStudentDetailsAsync(Guid id) { var channel = new Channel(channelTarget, ChannelCredentials.Insecure); try { var client = new StudentsGrpcService.StudentsGrpcServiceClient(channel); var request = new GetStudentDetailsRequest() { Id = id.ToString() }; var student = await client.GetStudentDetailsAsync(request); var studentModel = new StudentDetailsModel() { Id = Guid.Parse(student.Id), Name = student.Name, Address = student.Address, YearOfBirth = student.YearOfBirth, Grades = student.Grades.Select(g => new GradeModel() { CourseName = g.CourseName, CourseId = Guid.Parse(g.CourseId), Marks = g.Marks.ToList() }).ToList() }; return(studentModel); } finally { await channel.ShutdownAsync(); } }