C# Linq (from in select 구문, orderby)
리스트 등의 컬렉션에서 조건에 맞는 데이터를 추출하는 코드가 자주 사용되기 때문에 개발된 것이 바로 Linq(*쿼리)이다. 그래서 전형적으로 반복적으로 사용되는 코드를 좀 더 줄일 수 있게 해줍니다.
*쿼리:정보 수집에 대한 요청에 쓰이는 컴퓨터 언어
예를 들어서 위와 같은 코드는 input1이라는 리스트(list)컬렉션에 있는 데이터 중에서 짝수만 output1에 담아주는 코드인데 이런 것이 자주 사용되다보니,
위 와 같이 3줄로 줄여줄 수 있습니다. 이 구문을 from in select 구문이라고 하는데, 반드시 모든 Linq쿼리는 from, in, select 키워드를 포함시켜야합니다.
from 변수이름(맘대로) in 컬렉션이름
select 결과에 넣을 데이터
위 와 같은 형식으로 해주시면되겠습니다. 이때 where구문을 사용해서 조건을 정해줄 수 있습니다.
whele 조건식
을 통해서 조건을 정해주시면 해당 조건에 맞는 값으로 데이터가 생성됩니다.
정렬시키기
위에 보이는 orderby구문을 사용해주시면 정렬을 해서 데이터를 담을 수 있게됩니다. 기본값(default)은 오름차순(ascending)이며, 제가 결과로 보인 것은 descending(내임차순) 이기 때문에 큰 숫자 부터 출력된 것을 알 수 있습니다.
타입으로 왜 var를 사용하는가
Linq구문에서 생성되는 데이터의 타입을 받을때 알아서 정해주는 var를 사용했는데, 이는 select구문에 따라서 데이터 형이 바뀔 수 있기 때문입니다. 그래서 안정적으로 var를 사용하는 것이죠. 하지만 위와 같은 코드에서는 예를 들면 var대신에 IEnumerable<int> 라는 인터페이스<제너릭>을 사용해서 값을 받아줄 수 있습니다. 그러나 var를 사용하는 것이 안정적이고 편합니다.
이때 IEnumberable 인터페이스는 지정된 형식의 컬렉션을 단순하게 반복할 수 있게 해주는 열거자를 노출합니다. (이건 뭔말인지 잘 모르겠군요저도. 그냥 편하게 열거용 사용할라고 만들어놓은 인터페이스 같습니다. 아시는분 덧글로 알려주세요.)
그럼 매서드에서 반환을 못하는가
var키워드를 매서드의 반환형으로 사용할 수 없기 때문에 그럼 매서드에서는 사용이 불가능한 것일까? 이때는 바로 형변환을 해주는 매서드를 사용한다. 예를들어서 ToArray<int>() 또는 ToList<int>()가 있을 것이다.
글로는 잘 이해가 안될 까바 위 코드를 참고하면 이해가 쉽게 될 것 같아서 첨부합니다.
사실 간단한 예시만 봐서 그런지 아직까지 이게 그렇게 까지 쓸모가 있을 지는 모르겠지만, 역시 알아두면 언젠간 쓰일 수도 있기 때문에 알아두시면 좋을 것 같습니다.
'C#(.NET)' 카테고리의 다른 글
[C#] IEnumerable Interface 열거자 인터페이스 (0) | 2018.04.07 |
---|---|
[C#] 복습 참조복사 값복사 (얕은 복사, 깊은 복사) (1) | 2018.04.05 |
C# 예외처리, 고급예외처리 (try, catch, finally, throw) 적용시키기 (1) | 2017.12.03 |
[C#] 쓰레드(Thread) 사용방법 + start() 메서드(method) (0) | 2017.11.22 |
c# 인터페이스(interface) 그리고 IComparable, IDisposable 무엇 (1) | 2017.11.17 |