[C#동영상]C# 링크(LINQ) 소개, HelloWorld, 쿼리식기반, 메서드기반 FROM, SELECT, GROUP, WHERE, C#학원, 닷넷학원, 자바학원, WPF학원, 시샵학원
http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=413
ojc.asia
https://www.youtube.com/watch?v=GqDWbAOjO4A&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=22


C# 링크(LINQ) 소개
HelloWorld
쿼리기반, 메서드 기반
C# 링크(Language-Integrated Query, Linq)
- LINQ는 C#, VB.NET에 통합된 질의 기능이며, 친숙한 언어구문을 많이 사용하기에 이해하기가 쉽다.
- 데이터베이스의 데이터를 질의하기 위해 Structured Query Language(SQL)을 사용하지만 LINQ는 컬렉션 객체, DataSet, XML Docs, 웹서비스, MS-SQL서버 및 기타 데이터베이스와 같은 다양한 유형의 데이터 소스에서 데이터를 검색하기 위해 C# 및 VB.NET에 통합된 질의 기능이다.
- LINQ는 문법이 SQL과 비슷한 쿼리식 형태와 이를 확장 메소드로 구현하여 제공하는 메서드 구문 형태가 있는데 두 가지 다른 형식 사이에는 의미 또는 성능 차이가 없다.
[쿼리식 형태] var empList2 = from emp in emps where emp.Sal > 1000 select emp; [메서드 기반 형태] var empList3 = emps.Where(emp=> emp.Sal > 1000).ToList<Emp>(); |
- 대부분의 쿼리에서 LINQ의 선언적 쿼리식을 사용한다. 표준 쿼리 연산자 Where, Select, GroupBy, Join, Max, 및 Average 등을 이용하여 쿼리 구문 대신 메소드 기반 쿼리식을 사용할 수도 있다. Count 또는 Max와 같은 일부 쿼리 작업에는 동등한 쿼리 식 절이 없으므로 메서드기반을 사용해야 한다.
- 쿼리식은 메서드구문 형태로 변환된다. 쿼리 구문을 사용하여 표현할 수 있는 쿼리는 메서드 구문으로도 표현할 수 있다. 그러나 대부분의 경우 쿼리 구문이 더 읽기 쉽고 간결하다.
- 쿼리 식의 변수는 대부분 컴파일러에서 형식을 유추할 수 있으므로 형식을 명시적으로 제공하지 않아도 된다.
LINQ 쿼리식 기본
Linq 기본 문법
from <범위변수> in <IEnumerable<T> or IQueryable<T> Collection> <Standard Query Operators> <lambda expression> where, orderby, join, let등 쿼리 연산자 <select or groupBy> |
FROM
LINQ 쿼리식은 FROM절로 시작하고 범위변수가 뒤따른다, 데이터원본의 데이터를 나타내는 범위 변수를 FROM절에 기술해야 한다. in 다음에 나오는 데이터원본 형식은 자유로우며 IEnumerable<T>, IQueryable<T> 인터페이스를 상속하는 형식이어야 한다. 그러므로 배열이나 컬렉션 객체들은 FROM 절에 올 수 있다.
범위변수는 쿼리변수라고도 하는데 foreach의 반복변수 정도로 보면 된다. Foreach 반복변수와 범위변수가 다른 점은 Foreach 반복변수가 원본으로부터 데이터를 담고 있지만 범위변수는 데이터를 담고 있지는 않다. 그러므로 쿼리식 외부에서 선언된 변수에 범위변수의 데이터를 복사할 수는 없다. 범위변수는 오로지 LINQ 질의 안에서만 통용된다.
LINQ에서 사용되는 쿼리식은 from 절로 시작하여 select 또는 group 절로 끝나야 한다. 첫 번째 from 절과 마지막 select 또는 group 절 사이에는 where, orderby, join, let 및 추가 from 절과 같은 쿼리 연산자가 하나 이상이 포함될 수 있으며 into 키워드를 사용하여 join 또는 group 절의 결과를 같은 쿼리 식에 있는 다른 쿼리 절의 소스로 사용할 수 있다. Linq에는 50개 정도의 표준 쿼리 연산자가 있다.
WHERE
조건 필터링을 하는 연산자, FROM절의 범위변수가 가져야 하는 조건을 WHERE 연산자에 매개변수로 입력하면 LINQ는 해당 조건에 맞는 데이터만 추출한다.
ORDERBY
추출되는 데이터의 정렬을 수행하는 연산자
SELECT or Group
LINQ쿼리는 항상 Select 또는 Group절로 끝난다. Select절은 추출할 데이터를 형성하는데 사용되는데 전체 객체를 그냥 추출할건지, 일부 속성만 추출 할것인지등을 선택 한다.
var empList2 = from emp in emps where emp.Sal > 1000 select emp; var empList2 = from emp in emps where emp.Sal > 1000 select new { emp.Empno, emp.Ename } var empList4 = from emp in emps group emp by emp.Ename[2]; |
[실습 : 링크를 사용하지 않은 경우와 링크를 사용한 예]
class Emp { public int Empno { get; set; } public string Ename { get; set; } public int Sal { get; set; } public override String ToString() { return "Emp : " + Empno + "," + Ename + "," + Sal; } } class LinqTest { private static List<Emp> emps = new List<Emp> { new Emp() { Empno = 1, Ename="1길홍", Sal=900}, new Emp() { Empno = 2, Ename="2길동", Sal=1500}, new Emp() { Empno = 3, Ename="3길홍", Sal=800} }; static void Main() { List<Emp> empList = new List<Emp>(); //링크 사용전 foreach(var emp in emps) { if (emp.Sal > 1000) empList.Add(emp); } foreach (var emp in empList) Console.WriteLine(emp); //링크사용(쿼리기반 표현식) var empList2 = from emp in emps where emp.Sal > 1000 select emp; foreach (var emp in empList2) Console.WriteLine(emp); //링크사용(메서드 기반 표현식) var empList3 = emps.Where(emp=> emp.Sal > 1000).ToList<Emp>(); foreach (var emp in empList3) Console.WriteLine(emp); //GROUP BY var empList4 = from emp in emps group emp by emp.Ename[2]; foreach (var empGroup in empList4) { Console.WriteLine($"Key: {empGroup.Key}"); //각 그룹항목을 추출 foreach (var emp in empGroup) { Console.WriteLine($"\t{emp.Empno}, {emp.Ename}"); } } } } |
#링크, #LINQ, #LINQHelloWorld, #쿼리식, #메서드기반, #링크쿼리, #시샵링크, #닷넷링크, #시샵동영상, #닷넷동영상, #닷네교육, #닷넷학원, 링크, LINQ, LINQHelloWorld, 쿼리식, 메서드기반, 링크쿼리, 시샵링크, 닷넷링크, 시샵동영상, 닷넷동영상, 닷네교육, 닷넷학원,