C#에서 가장 마음에 드는 기능인 linq에 대해 정리해보고자 함.
기초 내용이니까 숙달된 사람한테는 영양가 없는 글이 되겠음
linq는 Language INtegrated Query 의 준말로, 간단히 말해서 C#에서 sql의 DML같은 문법으로 데이터를 가공할 수 있는 개념이라고 생각하면 편하다.
기본적인 linq의 문법은 다음과 같음.
using System; using System.Collections.Generic; using System.Linq; namespace myProgram { class Program { static void Main(string[] args) { List<int> integerList = Enumerable.Range(1, 10).ToList(); //Generates integers that belong to 1 - 10. var evenValues = from item in integerList where item % 2 == 0 select item; foreach (var item in evenValues) Console.Write($"{item} "); //Output: 2 4 6 8 10 separated with tab. } } }sql의 문법이 보이면서도 약간 다른 모습을 볼 수 있다. 알고있겠지만 줄바꿈 안해도 됨
정수를 담고 있는 테이블 INTEGER_TABLE이 있다고 하면 mysql 기준으로는...
SELECT item FROM INTEGER_TABLE WHERE MOD(item, 2) = 0;이런 느낌으로 작성이 가능할 것임.
나머지, 비교 연산자가 다른건 그렇다 치고 순서가 다르다. 그래서 필자는 linq를 처음 접했을 때 어색함을 느꼈음
가만 생각해보면 어디서 뽑을지, 어떤 조건으로 거를지, 결과를 어떻게 가공해서 보여줄지의 순서가 합당하긴 한데... mysql은 문장을 통째로 파싱해서 처리하나 싶기도 하다. 공부해봐야겠음ㅇㅇ
아무튼 해당 정보는 여기에서도 확인할 수 있다......만
위와 같은 방식으로 쓰는건 추천하지 않음. 아래 코드를 보자.
var evenValues = integerList.Where(x => x % 2 == 0);앞선 코드와 정확히 같은 결과가 나온다. 다만 select절이 생략될 수 있다는 것이 차이점.
그리고, 두 경우 전부 evenValue의 자료형은 IEnumerable<int>임. 기존의 intergerList의 자료형과 맞추려면 .toList() 메서드를 호출하면 된다.
var evenValues = (from item in arr where item % 2 == 0 select item).ToList(); evenValues = arr.Where(x => x % 2 == 0).ToList();괄호 우웩
개인차가 있겠지만 아래쪽의 IEnumerable 인터페이스의 메서드 체이닝을 통한 linq 구현이 더 보기 좋고, 사용성도 좋다고 생각함.
여기서 메서드 일람을 조회할 수 있음.
sql에서 사용할 수 있는건 아마 대부분 사용이 가능할거임. 좀 복잡해지는 것들도 있고... 그런것들 중 이해가 잘 안되는 것들이 있다면 Generic과 Anonymous function등에 대해 공부하고 오도록 합시다.
참고로 limit n, m 구절은 .Skip(n).Take(m);으로 사용할 수 있음.
좀 진부한 표현이지만 Linq는 정말 "강력"한 도구임. C#하면서 안쓰면 경력 절반 손해봤엇~~~~! 외치기 가능
C#갤러리 있길래 끄적여봄.
글 앞을 파랗게 만들어주는 짤방
댓글 0