프로그래밍(Programming)/C#
Linq (1)
3DMP
2023. 4. 8. 11:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp2
{
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 Linq
{
static List<Player> _players = new List<Player>();
static void Main(string[] args)
{
Random rand = new Random();
for(int i=0;i<100;++i)
{
ClassType type = ClassType.Knight;
switch(rand.Next(0, 3))
{
case 0:
type = ClassType.Knight;
break;
case 1:
type = ClassType.Archer;
break;
case 2:
type = ClassType.Mage;
break;
}
Player player = new Player()
{
ClassType = type,
Level = rand.Next(1, 100),
HP = rand.Next(100, 1000),
Attack = rand.Next(5, 50)
};
_players.Add(player);
}
GetHightLevelKnights();
}
//레벨이 50 이상인 knight 만 추려서 레벨을 낮음->놎음 순으로 정렬
private static void GetHightLevelKnights()
{
//linq 문법으로 db 쿼리문 처럼 조회 할 수 있다
//from 은 foreach 로 생각해도 괜찮다
//실행 순서는 from where orderby select 순으로실행된다 생각하면 된다
var players =
from p in _players
where p.ClassType == ClassType.Knight && p.Level >= 50
orderby p.Level
select p;
foreach (Player p in players)
{
Console.WriteLine($"{ p.Level} {p.HP} {p.ClassType}");
}
}
}
}
linq 문법으로 db 쿼리문 처럼 조회 할 수 있다
from 은 foreach 로 생각해도 괜찮다
실행 순서는 from where orderby select 순으로실행된다 생각하면 된다
=> 이것이 원래 db 의 쿼리 구문을 이해하는 순서인데 c# 의 linq 에서는 select를 아예 밑으로 내려놨음
var players =
from p in _players
where p.ClassType == ClassType.Knight && p.Level >= 50
orderby p.Level
select p;
유니티에선 linq 가 ios 버전에서 문제가 발생 할 수 있어서(불안전해서) 안쓰는게 좋다
(현재 버전 확인 필요)
서버에선 linq 활용을 하기에 DB 와의 명령어등의 호환성 좋아서 사용하는것은 괜찮다
db 관련 참고글 https://3dmpengines.tistory.com/category/%EC%84%9C%EB%B2%84%28Server%29/DB
반응형