
LINQ (Language-Integrated Query)
C# 언어에 직접 쿼리 기능을 통합하는 방식을 기반으로 하는 기술 집합 이름
// 웨폰 리스트
List<Weapon> weapons = new List<Weapon>
{
new Weapon { Name = "불의 검", Type =
WeaponType.Sword, Grade = Grade.Epic, AttackPower =
120, RequiredLevel = 10, Price = 3000 },
new Weapon { Name = "얼음 활", Type =
WeaponType.Bow, Grade = Grade.Rare, AttackPower =
85, RequiredLevel = 8, Price = 2000 },
new Weapon { Name = "드래곤 랜스", Type =
WeaponType.Lance, Grade = Grade.Legendary,
AttackPower = 150, RequiredLevel = 15, Price = 5000
},
new Weapon { Name = "은총", Type =
WeaponType.Gun, Grade = Grade.Common, AttackPower =
60, RequiredLevel = 5, Price = 1200 },
new Weapon { Name = "황금 활", Type =
WeaponType.Bow, Grade = Grade.Epic, AttackPower =
110, RequiredLevel = 12, Price = 3500 },
new Weapon { Name = "폭풍의 검", Type =
WeaponType.Sword, Grade = Grade.Unique, AttackPower
= 100, RequiredLevel = 11, Price = 2800 }
};
Where
List<Weapon> powerfulWeapons = weapons.Where
(w => w.AttackPower >= 100).ToList();
foreach (Weapon w in powerfulWeapons)
{
Debug.Log($"{w.Name} - {w.AttackPower} ATK");
}
// 출력
불의 검 - 120 ATK
드래곤 랜스 - 150 ATK
황금 활 - 110 ATK
폭풍의 검 - 100 ATK
리스트 이름: powerfulWeapons
Weapon 타입의 객체를 저장하는 새로운 리스트를 선언
Where: 특정 조건을 만족하는 컬렉션 항목만 선택
w: weapons의 임시 변수 (아무거나로 지정해도 됨/ a, b, c ... 다 된다.)
w.AttackPower >= 100: Weapon 객체의 AttackPower 값이 100 이상인지 확인
.ToList(): Where 메서드에서 반환된
IEnumerable 타입의 결과를
List<string> weaponNames =
weapons.Select(w => w.Name).ToList();
foreach (Weapon w in powerfulWeapons)
{
Debug.Log($"{w.Name} - {w.AttackPower} ATK");
}
// 출력
불의 검 - 120 ATK
드래곤 랜스 - 150 ATK
황금 활 - 110 ATK
폭풍의 검 - 100 ATK
리스트 이름: weaponNames
w => w.Name: w.Name은 각 Weapon 객체의 Name 속성을 의미
Select: 컬렉션의 각 항목을 다른 형태로 변환하거나, 특정 속성만 추출할 때 사용
결과적으로 이 Select 절은 weapons 컬렉션의
각 Weapon 객체에서 Name 속성만을 뽑아냄