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));
        }
コード例 #2
0
        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();
            }
        }