LINQ
LINQ(Language-Integrated Query)는 C# 언어에 직접 쿼리 기능을 통합하는 방식을 기반으로 하는 기술 집합 이름입니다. 일반적으로 데이터에 대한 쿼리는 컴파일 시간의 형식 검사나 IntelliSense 지원 없이 간단한 문자열로 표현됩니다. 또한 데이터 원본의 각 유형에 대해 다른 쿼리 언어를 배워야 합니다. SQL 데이터베이스, XML 문서, 다양한 웹 서비스 등. LINQ를 사용할 경우 쿼리는 클래스, 메서드, 이벤트와 같은 고급 언어 구문이 됩니다. 언어 키워드 및 친숙한 연산자를 사용하여 강력한 형식의 개체 컬렉션에 대해 쿼리를 작성합니다. LINQ 기술은 개체(LINQ to Objects), 관계형 데이터베이스(LINQ to SQL) 및 XML(LINQ to XML)에 대한 일관성 있는 쿼리 환경을 제공합니다.
쿼리를 작성하는 개발자의 경우 LINQ에서 가장 눈에 잘 띄는 "언어 통합" 부분은 쿼리 식입니다. 쿼리 식은 선언적 쿼리 구문 으로 작성됩니다. 쿼리 구문을 사용하면 최소한의 코드로 데이터 소스에 대해 필터링, 정렬 및 그룹화 작업을 수행할 수 있습니다. 동일한 기본 쿼리 식 패턴을 사용하여 SQL 데이터베이스, ADO.NET 데이터 세트, XML 문서 및 스트림, .NET 컬렉션에서 데이터를 쿼리하고 변환할 수 있습니다.
데이터 질의 기능
From : 데이터 소스 지정
Where : 필터 적용(조건)
Select : 반환되는 요소 형식을 지정
예제]
using System; using System.Linq; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; var numQuery = from num in numbers where (num % 2) == 0 select num; foreach (int num in numQuery) { Console.WriteLine("{0,1} ", num); } } } } |
실행결과] 0 2 4 6 |
Linq를 이용하여 짝수를 오름차순으로 출력하시오.
using System; using System.Linq; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int[] numbers = { 9, 2, 6, 4, 5, 3, 7, 8, 1, 10}; var result = from n in numbers where n % 2 == 0 orderby n ascending select n; Console.WriteLine("오름차순"); foreach (int n in result) Console.WriteLine("{0}", n); result = from n in numbers where n % 2 == 0 orderby n ascending select n; Console.WriteLine("내림차순"); foreach (int n in result) Console.WriteLine("{0}", n); } } } |
실행결과] 오름차순 2 4 6 8 10 내림차순 10 8 6 4 2 |
예제
using System; using System.Linq; namespace ConsoleApp1 { class Profile { public string Name { get; set; } public int Height { get; set; } public float Weight { get; set; } } class Program { static void Main(string[] args) { Profile[] arrMember = { new Profile() {Name="둘리", Height=152, Weight=35.5f }, new Profile() {Name="희동이", Height=105, Weight=27.8f }, new Profile() {Name="고길동", Height=168, Weight=70.2f }, new Profile() {Name="또치", Height=160, Weight=32.7f }, new Profile() {Name="도우너", Height=153, Weight=40.6f } }; var resQuery = from profile in arrMember where profile.Height < 160 orderby profile.Height select new { profile.Name, profile.Height, profile.Weight }; foreach (var profile in resQuery) Console.WriteLine("{0}\t{1}\t{2}", profile.Name, profile.Height, profile.Weight); } } } |
실행결과] 희동이 105 27.8 둘리 152 35.5 도우너 153 40.6 |
여러 개의 데이터 원본에 질의하기
using System; using System.Linq; namespace ConsoleApp1 { class Class { public string Name { get; set; } public int[] Score { get; set; } } class Program { static void Main(string[] args) { Class[] arrClass = { new Class() {Name="둘리", Score= new int[] { 90, 80, 70, 60} }, new Class() {Name="희동이", Score= new int[] { 40, 50, 60, 50} }, new Class() {Name="고길도", Score= new int[] { 100, 85, 90, 85} }, new Class() {Name="도우너", Score= new int[] { 90, 50, 70, 50} }, new Class() {Name="또치", Score= new int[] { 50, 70, 40, 60} } }; var classes = from c in arrClass from s in c.Score where s < 50 orderby s select new { c.Name, Lowest = s }; foreach (var c in classes) Console.WriteLine("과락 : {0} ({1})", c.Name, c.Lowest); } } } |
실행결과] 과락 : 희동이 (40) 과락 : 또치 (40) |