LINQ
LINQ는 Language Integrated Query의 약자로 C#에 통합된 데이터 질의 기능이다. SQL과 같은 Query언어는 데이터베이스에서 사용되던 언어인데, 이를 C#에 도입한 것이다. LINQ를 사용하면 컬렉션에서 데이터를 다루는 방법이 훨씬 간단해진다. LINQ는 람다와 함께 C# 3.0에 도입된 기능이다.
var sorted Even = from item in data
where item % 2 == 0
orderby item
select item;
위의 문장을 보면 from, where, orderby, select 등의 LINQ 연산자가 사용되었다.
"data 컬렉션에 있는 데이터 item으로 부터 item이 짝수이면 item값으로 정렬하여 선택한다." 라는 뜻의 쿼리문이다.
LINQ를 사용하려면 원본 데이터가 IEumerable 이나 IEumerable <T> 인터페이스를 상속하는 형식이어야한다. 배열과 리스트 등의 컬렉션들은 모두 여기에 해당된다.
List에서 짝수 데이터만 꺼내서 정렬하는 예제를 기존의 방법과 LINQ를 사용하는 두 가지 방법으로 작성해보자.
using System;
using System.Collections.Generic;
using System.Linq;
namespace _20200821_005_LinQ
{
class Program
{
static void Main(string[] args)
{
// 기존의 예제
List<int> data = new List<int> { 123, 34, 12, 89, 456, 1, 4, 74, 46 };
List<int> lstSortedEven = new List<int>();
foreach (var item in data)
{
if (item % 2 == 0)
lstSortedEven.Add(item);
}
lstSortedEven.Sort();
Console.WriteLine("Using foreach : ");
foreach (var item in lstSortedEven)
Console.Write(item + " ");
Console.WriteLine();
var sortedEven = from item in data // LINQ 시작
where item % 2 == 0
orderby item
select item;
Console.WriteLine("\nUsing Linq: ");
foreach (var item in sortedEven)
Console.Write(item + " ");
Console.WriteLine();
}
}
}
LINQ를 이용한 조건 검색과 정렬
LINQ 사용법을 조금 더 공부해보자. 컬렉션에서 원하는 값을 찾는 과정이 마치 DB에서 질의하는 것과 같다.
이번엔 조건이 있는 예제를 작성해보자.
// data 리스트에서 20보다 큰 짝수를 내림차순으로 정렬하여 저장
// 이 값을 2씩 곱해서 오름차순으로 정렬하여 저장
using System;
using System.Collections.Generic;
using System.Linq;
namespace _20200821_005_LinQ_2
{
class Program
{
static void Main(string[] args)
{
List<int> data = new List<int> { 123, 34, 12, 89, 456, 1, 4, 74, 46 };
Print("data : ", data);
var lstEven = from item in data
where (item > 20 && item % 2 == 0)
orderby item descending
select item;
Print("20보다 큰 짝수 검색결과: ", lstEven);
var lstSorted = from item in lstEven
orderby item ascending
select item * 2;
Print("2를 곱해서 오름차순 정렬: ", lstSorted);
}
private static void Print(string s,IEnumerable<int> data)
{
Console.WriteLine(s);
foreach (var i in data)
Console.WriteLine(" " + i);
Console.WriteLine();
}
}
}
select가 필요한 이유?
form temp in ㅁㅁㅁ // 추출
select temp // 가공
추출부분은 그대로 쓰겠다는 거고, 가공부분은 곱하기2나 다른 가공이 필요하면 select같은 가공부분이 필요하다.
from temp in aList1
order by Temp (ascending <-> deascending) // 아무것도 안적으면 오름차순이 생략되어있다.(반대는 내림차순)
select temp
'개발자과정준비 > C#' 카테고리의 다른 글
[C#] 문자열(String) 처리 - 1 (0) | 2020.09.26 |
---|---|
[C#] 시간(DateTime, TimeSpan, Diagnostics.Stopwatch) (0) | 2020.09.19 |
[C#] IComparable 인터페이스를 이용한 객체의 정렬 (0) | 2020.08.28 |
[C#] List<T> 컬렉션, List<T>와 배열의 정렬 (0) | 2020.08.28 |
[C#] 컬렉션, ArrayList (0) | 2020.08.24 |