IT
[C#] Linq 기초용례 기록-
타이젠 개발자, 윤진
2017. 2. 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가 개발자에게 개발편의를 제공하기 위해 참 애썼다는 생각이 듭니다.
프로그래밍 언어는 기능이 많아질수록 온갖 예외사항이 덧붙여지기 마련인데요.
여러 난관에도 불구하고, 재미난 기능을 개발하는 모습을 보니 한편으로는 대단하기도 하네요.
끝_