[HCI] 7주차 LINQ

정수현·2025년 4월 30일

C#

목록 보기
9/10

2025-04-30

📍 LINQ 쿼리

  • Language Intergrated Query
  • 쿼리 : 데이터 소스에서 데이터를 검색하는 식
  • 배열/데이터베이스에서 조건에 맞는 자료만 뽑는 기능을 제공한다.

🍀 예시

numbers 배열에서 짝수만 선택한다.

int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

var numQuery = from num in numbers where (num % 2) == 0 select num;



📍 데이터 소스 (DataSource)

  • 데이터소스가 쿼리 가능한 형식으로 존재하지 않는 경우, LINQ 공급자가 소스를 나타내야 한다.
// Create a data source from an XML document using System.Xml.Linq
XElement contacts = XElement.Load(@”C:\myContactList.xml”);

// LINQ to SQL
Northwnd db = new Northwnd(@”C:\northwnd.mdf”);
IQueryable<Customer> custQuery =
		from cust in db.Customers
		where cust.City == “London” select cust;



📍 필터링

  • boolean 형식으로 필터를 적용할 수 있다.
  • 결과는 WHERE 절을 사용하여 생성한다.
  • &&|| 연산자를 사용하여 WHERE 절에 필요한 만큼의 필터 식을 적용할 수 있다.



📍 정렬

  • orderby 절은 반환된 시퀀스의 요소가 정렬하고 있는 형식의 기본 비교자에 따라 정렬 된다.
var query = 
	FROM cust in db.Customers
    WHERE cust.City == "London" && cust.name == "Dave"
    ORDERBY cust.name ascending
    SELECT cust;



📍 그룹화

  • GROUP 절을 사용하면 지정한 키에 따라 결과를 그룹화할 수 있다.
  • INTO 키워드를 사용하여 계속 쿼리할 수 있는 식별자를 만들어야 한다.



📍 조인

  • 데이터 소스에서 명시적으로 모델링된 시퀀스 간의 연결을 생성한다.
    -JOIN 절은 DB 테이블에 직접 작업하는 대신 개체 컬렉션에 대해 작업한다.



📍 표준 쿼리 연산자 확장 메서드

  • LINQ의 선언적 쿼리 구문은 컴파일할 때 CLR에 대한 메서드 호출로 변환한다.
  • WHERE, SELECT, GROUPT BY, JOIN, MAX, AVERAGE 메서드 구문을 직접 사용할 수 있다.

🍀 예시

int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// 1) 쿼리 구문
var numQuery1 = from num in numbers
where (num % 2) == 0 orderby num select num;

// 2) 메서드 구문
var numQuery2 = numbers.Where(num => num%2 != 0).OrderBy(n=>n);
  • 쿼리 구문 : SQL처럼 보이는 선언적 방식
  • 메서드 구문 : 확장 메서드를 체이닝

⇒ 쿼리 방식을 쓰든, 메서드 방식을 쓰든 동일한 기능을한다. 선호도에 따라 골라서 사용할 수 있다.

0개의 댓글