[C# 문법] C# LINQ GroupBy 이용하여 최대값 가져오기

소개

안녕하세요. C# 문법에서 LINQ 구문에 대해서 알려 드리려고 합니다. 그 중에서도 특정 데이터에서 그룹을 지어서 해당 그룹별 가장 큰 값, 즉 최대값을 가져오는 방법에 대해서 알려 드리려고 합니다. 어렵지 않고 한번 알게되면 매우 유용하게 사용할 수 있으니까 한번씩 따라해 보시는걸 추천 드리겠습니다.

예제 코드

  • 제가 예제로 작성할 코드의 내용은 다음과 같습니다.
  • 학급별, 학생들 중에서 가장 성적이 높은 학생을 출력하는 방법을 LINQ 구문을 통해서 보여 드리도록 하겠습니다.
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp7
{
    class Program
    {
        static void Main(string[] args)
        {
            List<School> schoolList = new List<School>()
            {
                new School {CLASS = "1", NAME = "범범조조", AGE = 20, SCORE = 50},
                new School {CLASS = "1", NAME = "아이유", AGE = 20, SCORE = 15},
                new School {CLASS = "1", NAME = "유재석", AGE = 20, SCORE = 25},
                new School {CLASS = "1", NAME = "신짱구", AGE = 20, SCORE = 36},
                new School {CLASS = "2", NAME = "신짱아", AGE = 20, SCORE = 43},
                new School {CLASS = "2", NAME = "좐진수", AGE = 20, SCORE = 100},
                new School {CLASS = "2", NAME = "김철수", AGE = 20, SCORE = 22},
                new School {CLASS = "2", NAME = "이방원", AGE = 20, SCORE = 87},
                new School {CLASS = "3", NAME = "정도전", AGE = 20, SCORE = 54},
                new School {CLASS = "3", NAME = "무휼", AGE = 20, SCORE = 23},
                new School {CLASS = "3", NAME = "이방지", AGE = 20, SCORE = 43},
                new School {CLASS = "3", NAME = "이익준", AGE = 20, SCORE = 77},
                new School {CLASS = "3", NAME = "김준완", AGE = 20, SCORE = 100}
            };

            // 각 Class별로 성적이 가장 높은 학생 조회
            var query = schoolList.Where(student => student.SCORE > 0)
                                  .GroupBy(student => student.CLASS)
                                  .Select(student => new
                                  {
                                      student.Key,
                                      CLASS = student.OrderByDescending(value => value.SCORE)
                                                     .Select(value => value)
                                                     .FirstOrDefault()
                                  }).ToList();

            foreach (var item in query)
            {
                Console.WriteLine($"반 : {item.CLASS.CLASS} 이름 : {item.CLASS.NAME} 나이 : {item.CLASS.AGE} 성적 : {item.CLASS.SCORE}");
            }
        }
    }

    public class School
    {
        public string CLASS { get; set; }
        public string NAME { get; set; }
        public int AGE { get; set; }
        public int SCORE { get; set; }
    }
}

실행 결과

반 : 1 이름 : 범범조조 나이 : 20 성적 : 50
반 : 2 이름 : 좐진수 나이 : 20 성적 : 100
반 : 3 이름 : 김준완 나이 : 20 성적 : 100
  • 위의 예제코드를 실행시켜 보면, 위와 같이 Class 별로 가장 성적이 높은 학생이 출력되는 것을 확인할 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY