반응형
LINQ(Languate-INtegrated Query)는 C#에 통합된 데이터 질의 기능이다.
SQL과 같은 Query 언어는 데이터베이스 언어인데 이것을 C#에 도입한 것이다.
LINQ를 사용하면 컬렉션에서 데이터를 다루는 방법이 간단해진다.
var sortedEven = from item in data //불러올 데이터
where item % 2 ==0 //조건
orederby item // 정렬
select item; // 선택
"data 컬렉션에 있는 데이터 item으로부터 item이 짝수이면 item 값이 정렬하여 선택한다"이며, LINQ를 사용하면 원본 데이터가 IEnumerable이나 IEnumerable <T> 인터페이스를 상속하는 형식이어야 한다.
using System;
using System.Collections.Generic;
using System.Linq;
namespace A120_LinqBasic
{
class Program
{
static void Main(string[] args)
{
List<int> data = new List<int> { 123, 45, 12, 89, 456, 1, 4, 74, 46 };
List<int> lsSortedEven = new List<int>();
foreach (var item in data)
{
if (item % 2 ==0)
{
lsSortedEven.Add(item);
}
}
lsSortedEven.Sort();
Console.WriteLine("Using foreach: ");
foreach (var item in lsSortedEven)
{
Console.Write(item + " ");
}
Console.WriteLine();
var sortedEven = from item in data
where item % 2 == 0
orderby item
select item;
Console.WriteLine("\nUsing Linq: ");
foreach(var item in sortedEven)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
}
}
Linq를 사용하려면 using System.Linq를 추가해야 하며, 정수의 리스트 data를 정의하고 초기화한다. 정렬된 짝수의 리스트 lstSortedEven을 정의한다.
조건 검색과 정렬
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A121_LinqBasic2
{
class Program
{
static void Main(string[] args)
{
List<int> data = new List<int> { 123, 45, 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.Write(" " + i);
}
Console.WriteLine();
}
}
}
LINQ의 결과를 리스트나 배열로 반환
LINQ의 결과는 IEnumerable<T>가 되는데, LINQ의 결과를 리스트로 받고 싶으면 ToList<T>()메서드를 사용한다. 이와 비슷하게 LINQ의 결과를 배열로 받고 싶으면 ToArray<T>() 메서드를 사용하면 된다.
다음 프로그램은 리스트의 값 중에서 홀수를 찾아 정렬하여 리스트로 반환하고 짝수를 찾아 정렬하여 배열로 반환한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A122_LinqToList
{
class Program
{
static void Main(string[] args)
{
List<int> lstData = new List<int> { 123, 456, 132, 96, 13, 465, 321 };
Print("Data : ", lstData);
List<int> lstOdd = new List<int>();
lstOdd = SelectOddAndSort(lstData);
Print("Ordered Odd:", lstOdd);
int[] arrEven;
arrEven = SelectEvenAndSort(lstData);
Print("Orederd Even", arrEven);
}
private static List<int> SelectOddAndSort(List<int> lstData)
{
return (from item in lstData
where item % 2 == 1
orderby item
select item).ToList<int>();
}
private static int[] SelectEvenAndSort(List<int> lstData)
{
return (from item in lstData
where item % 2 == 0
orderby item
select item).ToArray<int>();
}
private static void Print(string s, IEnumerable<int> data)
{
Console.WriteLine(s);
foreach (var i in data)
{
Console.Write(" " + i);
}
Console.WriteLine();
}
}
}
'C# 이것저것 > 초보자를 위한 C#200제' 카테고리의 다른 글
[C#] Winform 콤보박스를 이용한 학점계산기 만들기 (0) | 2024.04.09 |
---|---|
[C#] Predicate<T> 델리게이트 (1) | 2024.02.02 |
[C#] 람다식(Lambda Expression) (0) | 2024.02.01 |
[C#] 델리게이트의 기본 (0) | 2024.02.01 |