안녕하세요, 모스크바에서 생활하고 있는 개발자 윤진입니다.
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가 개발자에게 개발편의를 제공하기 위해 참 애썼다는 생각이 듭니다.
프로그래밍 언어는 기능이 많아질수록 온갖 예외사항이 덧붙여지기 마련인데요.
여러 난관에도 불구하고, 재미난 기능을 개발하는 모습을 보니 한편으로는 대단하기도 하네요.
끝_
'IT' 카테고리의 다른 글
Acer 노트북 + 우분투 16.04 이슈해결기 (2) | 2018.03.07 |
---|---|
[人터뷰] 개발자의 길에서 벗어나 영업으로 떠난 С군 (0) | 2017.02.28 |
[알고리즘] 유클리드 호제법, 간단하게 증명하기 (0) | 2017.02.22 |
[人터뷰] 모스크바에서 만난 개발자, 알렉세이 (0) | 2017.02.18 |
[C#] delegate, anonymous delegate, lambda 용례비교 (0) | 2017.02.15 |
[C#] using과 Dispose()로 리소스 정리하기 (0) | 2017.02.13 |
[C#] 필드 사용가능? - interface, abstract class, partial class, virtual method (30) | 2017.02.12 |
[C#] 속성에 대한 간단한 테스트 (0) | 2017.02.09 |
[C#] 늘 헛갈리 Modal vs Modeless (0) | 2017.02.07 |
[C#] 소수점이 있는 숫자는 float일까 double일까. (30) | 2017.02.04 |