[C# 문법] C# LINQ GroupBy 이용하여 최대값 가져오기
- C#/C# 문법
- 2021. 8. 13. 08:28
소개
안녕하세요. 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
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] C# 문자열 null 또는 빈 문자열 판정하기 (0) | 2021.08.14 |
---|---|
[C# 문법] C# 대/소문자 구문 없이 문자열 비교하기 (0) | 2021.08.14 |
[C# 문법] C# Enum Description 사용 하기 (0) | 2021.08.13 |
[C# 문법] C# Linq 지연실행 (0) | 2021.08.10 |
[C# 문법] List<T> 클래스와 람다식 조합 (4) | 2021.08.06 |
이 글을 공유하기