[Web Server] 섹션 3. 고급 C# 문법 - 12. LINQ #2

from 중첩해서 사용하기

=> foreach를 2번 쓴 것과 같은 효과!

 

// from 2번 쓰기
var playerItems = from player in _players
                  from item in player.Items
                  where item < 30
                  select new { player, item };

 

 

grouping

// grouping
var playersByLevel = from player in _players
                     group player by player.Level into levelGroup
                     orderby levelGroup.Key
                     select new { levelGroup.Key, Players = levelGroup };

 

 

join

// outer join(외부 조인)
List<int> levels = new List<int>() { 1, 5, 9 };

var playerLevels = from player in _players
                   join level in levels
                   on player.Level equals level
                   select player;

 

 

LINQ 표준 연산자

// LINQ 표준 연산자
var players2 = from player in _players
               where player.ClassType == ClassType.Knight && player.Level >= 50
               orderby player.Level ascending
               select player;

// 위와 같은 표현. 이 버전이 세부 기능이 더 많음
var players3 = _players
    .Where(p => p.ClassType == ClassType.Knight && p.Level >= 50)
    .OrderBy(p => p.Level)
    .Select(p => p);

 

2가지 버전이 있는데, 위 버전에 있는데 아래 버전에 없는 기능이 있기도 하고, 그 반대의 경우도 있다.

둘 중에는 아래 버전이 더 기능이 많아서, 많은 기능을 쓰고싶으면 아래 버전을 사용하면 된다.