IT2017.02.20 12:00


안녕하세요, 모스크바에서 생활하고 있는 개발자 윤진입니다.


C#에서는 Language-INtegrated Query를 사용하여 데이터를 조작할 수 있습니다.

SQL문에서나 사용했던 쿼리문을-

C# 소스코드에서 다른 함수들과 뒤섞어 사용한다는게 흥미롭습니다.


물론, Linq가 SQL 쿼리문과 완전 동일하진 않습니다.

변수를 먼저 정의하고 연산문을 사용하는 C# 프로그래밍 루틴과 동일하게,

from - in 문을 우선적으로 배치하여 쿼리문에서 사용할 데이터를 한정짓습니다.


그리고 연산을 위한 where문이 나옵니다.

where문에서는 from - in에서 추려진 데이터를 가지고 조건연산을 수행합니다.


최종적으로 select는 from - in과 where 문을 거쳐 나온 결과물을 재가공하여 투사해줍니다.

select는 IEnumerable 타입의 컬렉션을 반환합니다.

그렇기에 ToList()나 ToArray()로 반환값을 재가공하여 원하는 결과물을 얻을 수 있습니다.


* ToList() 사용

            List input = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            List list = 
                (from num in input
                 where (num % 2) == 0
                 select num).ToList();

            foreach (var item in list)
            {
                Console.WriteLine(item);
            }


* ToArray() 사용

            List input = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            int[] array =
                (from num in input
                 where (num % 2) == 0
                 select num).ToArray();

            foreach (var item in list)
            {
                Console.WriteLine(item);
            }


더불어 select 문에서 new { } 형태의 익명클래스를 사용하면,

결과값을 토대로 원하는 임시클래스를 만들어 사용할 수 있습니다.

            List input = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

            var complex =
                from num in input
                select new { plus = num + num, multiply = num * num };

            foreach (var item in complex)
            {
                Console.WriteLine("Plus:{0}, Multiply:{1}", item.plus, item.multiply);
            }


Linq를 보니 MS가 개발자에게 개발편의를 제공하기 위해 참 애썼다는 생각이 듭니다.

프로그래밍 언어는 기능이 많아질수록 온갖 예외사항이 덧붙여지기 마련인데요.

여러 난관에도 불구하고, 재미난 기능을 개발하는 모습을 보니 한편으로는 대단하기도 하네요.


끝_



신고
Posted by 타이젠 개발자, 윤진