C# 서버 개발자 전환기 4편
2026-09-15 18:31:52

LINQ 심화 학습

1
2
3
4
5
6
var users = new List<User>
{
new User { Id = 100, NickName = "Alice", Level = 30, Server = "KR" },
new User { Id = 200, NickName = "Bob", Level = 40, Server = "KR" },
new User { Id = 300, NickName = "Charlie", Level = 20, Server = "JP" }
};

1. Select()

js에서 map()과 비슷함

1
2
3
var userNames = users
.Select(u => u.NickName)
.ToList(); // ["Alice", "Bob", "Charlie"]

2. First() / FirstOrDefault()

2.1 First()

조건에 맞는 첫 번째 데이터를 가져온다 없으면 예외 발생

1
var user = users.First(u => u.Level >= 30); // Alice (Level 30)

2.2 FirstOrDefault()

조건에 맞는 것 중 첫 번째를 가져오고, 없으면 기본값을 반환

1
var user = users.FirstOrDefault(u => u.Level >= 100); // null

3. Single() / SingleOrDefault()

3.1 Single()

조건에 맞는 게 정확히 1개여야 함 아니면 예외 발생

1
var user = users.Single(u => u.Id == 100); // { Id = 100, NickName = "Alice", Level = 30 }

3.2 SingleOrDefault()

조건에 맞는 게 0개 또는 1개일 수 있음

1
var user = users.SingleOrDefault(u => u.Id == 100);

기대 결과값

1
2
3
1개 있음  → 해당 User 반환
0개 → null 반환
2개 이상 → 예외 발생

4. Any()

조건을 만족하는 데이터가 하나라도 존재하는지 확인

1
var exists = users.Any(u => u.Level >= 40); // true

5. All()

모든 데이터가 조건을 만족하는지 확인

1
var result = users.All(u => u.Level >= 20); // true

6. Count()

데이터 개수를 가져온다

1
var count = users.Count(); // 3

조건 지정도 가능

1
var highLevelUserCount = users.Count(u => u.Level >= 30); // 2

7. GroupBy()

특정 기준으로 데이터를 그룹화

1
2
3
4
5
6
7
8
var result = users
.GroupBy(u => u.Server)
.Select(g => new
{
Server = g.Key,
Count = g.Count()
})
.ToList(); // KR → 2, JP → 1

8. ToDictionary()

데이터를 Dictionary로 변환, Key가 중복되면 예외가 발생

1
2
var userDictionary = users
.ToDictionary(u => u.Id); // 100 → Alice, 200 → Bob, 300 → Charlie

9. SelectMany()

리스트 안에 있는 리스트를 하나로 펼침

1
2
3
4
5
6
7
8
9
10
var inventories = new List<List<string>>
{
new List<string> { "Sword", "Potion" },
new List<string> { "Shield", "Bow" },
new List<string> { "Helmet" }
};

var items = inventories
.SelectMany(x => x)
.ToList(); // ["Sword", "Potion", "Shield", "Bow", "Helmet"]

10. Distinct()

중복을 제거

1
2
3
4
5
6
7
8
var serverNames = new List<string>
{
"KR", "JP", "KR", "US", "JP", "KR"
};

var uniqueServers = serverNames
.Distinct()
.ToList(); // ["KR", "JP", "US"]

11. ThenBy() / ThenByDescending()

추가 정렬할때 사용 ThenBy는 오름차순, ThenByDescending는 내림차순

1
2
3
4
var result = users
.OrderByDescending(u => u.Level) // 레벨로 내림차순
.ThenBy(u => u.Id) // 레벨이 같으면 id로 오름차순
.ToList(); // Bob Level 40, Id 200 Alice Level 30, Id 100 ...
Prev
2026-09-15 18:31:52