데이터를 가공할 때 유용하게 쓸 수 있는 문법이다!
SQL 문법과 비슷하고 가독성이 좋아 기능을 쉽게 파악할 수 있다는 것이 장점이다.
근데 유니티에서 LINQ 쓰면 오류날 수도 있어서...(특히 ios) 별로 추천하진 않는다고 한다...(초창기에 그랬다고 함)
근데 LINQ를 기반으로 하는 기술들이 많아서, 공부할 가치가 있다
using System.Threading.Tasks;
using System;
namespace TaskPractice
{
public enum ClassType
{
Knight,
Archer,
Mage,
}
public class Player
{
public ClassType ClassType { get; set; }
public int Level { get; set; }
public int Hp { get; set; }
public int Attack { get; set; }
}
class Program
{
static List<Player> _players = new List<Player>();
static async Task Main(string[] args)
{
Random random = new Random();
for (int i = 0; i < 100; i++)
{
ClassType classType = (ClassType)random.Next(0, 3);
int level = random.Next(1, 100);
int hp = random.Next(100, 1000);
int attack = random.Next(5, 50);
Player player = new Player
{
ClassType = classType,
Level = level,
Hp = hp,
Attack = attack
};
_players.Add(player);
}
// 레벨이 50이상인 Knight만 추려내서
// 레벨을 오름차순으로 순서로 정렬
// 기존 방법
List<Player> players = GetHighLevelKnights();
foreach (Player player in players)
{
Console.WriteLine($"ClassType : {player.ClassType}, Level : {player.Level}, Hp : {player.Hp}, Attack : {player.Attack}");
}
Console.WriteLine("===================================");
// LINQ 사용 방법
List<Player> linqPlayers = GetHighLevelKnightsByLinq();
foreach (Player player in linqPlayers)
{
Console.WriteLine($"ClassType : {player.ClassType}, Level : {player.Level}, Hp : {player.Hp}, Attack : {player.Attack}");
}
}
// 기존 방법
static public List<Player> GetHighLevelKnights()
{
List<Player> players = new List<Player>();
foreach (var player in _players)
{
if (player.ClassType != ClassType.Knight)
continue;
if (player.Level < 50)
continue;
players.Add(player);
}
players.Sort((p1, p2) => p1.Level.CompareTo(p2.Level));
return players;
}
// LINQ 사용 방법
static public List<Player> GetHighLevelKnightsByLinq()
{
// from : foreach 역할
// where : 필터 역할(조건에 부합하는 데이터만 걸러냄)
// orderby : 정렬 역할(ascending / descending)
// select : 최종 결과 추출. 가공해서 추출할지도 결정 가능. ex) player.Hp
// Anonymous Type 으로 추출 가능. ex) new { Hp = player.Hp, Level = player.Level * 2 }
var players = from player in _players
where player.ClassType == ClassType.Knight && player.Level >= 50
orderby player.Level ascending
select player;
return players.ToList();
}
}
}
출처
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part6: 웹 서버 강의 | Rookiss - 인프런
'Unity > Web Server' 카테고리의 다른 글
| [Web Server] HTTP 서버통신 및 API 사용방법 (0) | 2025.10.15 |
|---|---|
| [Web Server] 섹션 3. 고급 C# 문법 - 12. LINQ #2 (0) | 2025.10.09 |
| [Web Server] 섹션 3. 고급 C# 문법 - 11. Async, Await (0) | 2025.09.07 |
| [Web Server] 섹션 2. 웹 기초 - 3. 환경 설정 (0) | 2025.08.24 |