C# LINQ에서 쿼리 작성

C Linqeseo Kwoli Jagseong



SQL과 마찬가지로 쿼리 구문을 사용하여 C# LINQ에서 쿼리를 작성할 수 있습니다. 이러한 쿼리는 웹의 C# 데이터베이스 애플리케이션에서 사용되어 데이터베이스에서 데이터를 가져오고 웹에서 타사 사용자에게 표시합니다. 이 가이드에서는 SQL과 유사한 몇 가지 LINQ 쿼리에 대해 설명합니다. 이를 위해 목록 데이터 원본을 만들고 쿼리를 적용합니다.

쿼리 구문:

일반적인 구문을 살펴보겠습니다.

~에서 반복자 ~에 데이터 소스
선택하다 반복자 ;

여기:

  1. Data_Source는 데이터를 보유하는 목록일 수 있습니다.
  2. Iterator는 Data_Source에서 요소를 가져오는 데 사용됩니다.

데이터 소스

이 전체 가이드에서는 다음 레코드 목록을 데이터 원본으로 사용하고 모든 쿼리는 이 데이터 원본에만 적용됩니다. 환경에서 이 코드를 실행하고 논의할 다음 예제를 사용하여 쿼리 문을 하나씩 수정해야 합니다.

사용 체계 ;
사용 System.Collections.Generic ;
사용 시스템.링크 ;
사용 System.Collections ;

공공의 수업 계산
{
공공의 공전 무효의 기본 ( )
{
// 리스트 생성
country_prices 나열 = 새로운 목록 ( ) {

// 목록에 5개의 레코드 추가
새로운 물가 ( ) { 안건 = '과일' ,위치 = '미국' , 수량 = 100 , 비용 = 345.78 } ,
새로운 물가 ( ) { 안건 = '견과류' ,위치 = '인도' , 수량 = 200 , 비용 = 3645.78 } ,
새로운 물가 ( ) { 안건 = '기타' ,위치 = '영국' , 수량 = 500 , 비용 = 90.68 } ,
새로운 물가 ( ) { 안건 = '기름' ,위치 = '미국' , 수량 = 100 , 비용 = 345.78 } ,
새로운 물가 ( ) { 안건 = '칠리' ,위치 = '미국' , 수량 = 10 , 비용 = 67.89 } ,
} ;


각각 ( ~였다 ~에 국가_가격 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;
}
}
}
공공의 수업 물가 {
공공의 안건 { 얻다 ; 세트 ; }
공공의 위치 { 얻다 ; 세트 ; }
공공의 정수 수량 { 얻다 ; 세트 ; }
공공의 더블 비용 { 얻다 ; 세트 ; }
}

기록:

설명:

1. 다음 속성을 사용하여 가격을 생성합니다.

2. 기본 메서드를 사용하여 '계산'이라는 또 다른 클래스를 만들고 5개의 레코드가 있는 country_prices 목록을 만듭니다.

선택하다

기본적으로 'select'는 지정된 데이터 소스에서 속성을 선택하는 프로젝션 연산자입니다. 쿼리는 'from'으로 시작합니다. 그런 다음 데이터 소스를 반복하는 반복자를 지정합니다. 그런 다음 '선택' 연산자가 지정됩니다.

통사론:

모든 속성: Data_Source의 반복자에서 반복자를 선택합니다.

특정 속성: Data_Source의 반복자에서 iterator.attribute를 선택합니다.

예 1:

목록에서 모든 레코드를 선택하는 쿼리를 작성해 보겠습니다.

사용 체계 ;
사용 System.Collections.Generic ;
사용 시스템.링크 ;
사용 System.Collections ;

공공의 수업 계산
{
공공의 공전 무효의 기본 ( )
{
// 리스트 생성
country_prices 나열 = 새로운 목록 ( ) {

// 목록에 5개의 레코드 추가
새로운 물가 ( ) { 안건 = '과일' ,위치 = '미국' , 수량 = 100 , 비용 = 345.78 } ,
새로운 물가 ( ) { 안건 = '견과류' ,위치 = '인도' , 수량 = 200 , 비용 = 3645.78 } ,
새로운 물가 ( ) { 안건 = '기타' ,위치 = '영국' , 수량 = 500 , 비용 = 90.68 } ,
새로운 물가 ( ) { 안건 = '기름' ,위치 = '미국' , 수량 = 100 , 비용 = 345.78 } ,
새로운 물가 ( ) { 안건 = '칠리' ,위치 = '미국' , 수량 = 10 , 비용 = 67.89 } ,
} ;

//쿼리에서 연산자 선택
~였다 데이터 = ~에서 ~에 국가_가격
선택하다 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}
}
}
공공의 수업 물가 {
공공의 안건 { 얻다 ; 세트 ; }
공공의 위치 { 얻다 ; 세트 ; }
공공의 정수 수량 { 얻다 ; 세트 ; }
공공의 더블 비용 { 얻다 ; 세트 ; }
}

산출:

여기에서는 '선택' 쿼리에 속성을 지정하지 않았습니다. iterator를 사용하여 'foreach' 루프 내부의 쿼리(데이터)에서 모든 속성을 가져왔습니다.

예 2:

이제 'select' 연산자 내에 항목 속성을 지정하여 항목을 가져옵니다. 검색어는 ' from i in country_prices 선택 i.item '.

//쿼리에서 항목 속성을 가져오는 연산자 선택
~였다 데이터 = ~에서 ~에 국가_가격
선택하다 . 안건 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( ) ;

}

산출:

21번 라인 – 29번 라인:

2. 어디

일부 조건을 기반으로 데이터를 필터링하려는 경우 쿼리에서 'select' 절과 함께 'where' 연산자를 사용할 수 있습니다. 그러나 'where' 연산자가 먼저 사용되고 선택 연산자가 지정됩니다.

통사론:

LINQ 쿼리 내에서 'where' 연산자를 사용하는 방법을 살펴보겠습니다.

~에서 반복자 ~에 데이터 소스
어디 상태 / 에스
선택하다 반복자 . 기인하다 ;

예 1: 단일 조건

항목 속성을 기반으로 레코드를 필터링해 보겠습니다. 'where' 연산자에서 등호(==) 연산자를 조건으로 사용하고 반복자를 'Chhillies'와 비교합니다. 따라서 '칠리'와 관련된 레코드가 선택됩니다.

쿼리는 ' 내가 from country_prices
여기서 i.item == '칠리'
나 선택”

//레코드를 필터링할 위치를 선택합니다.
~였다 데이터 = ~에서 ~에 국가_가격
어디 . 안건 == '칠리'
선택하다 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}

산출:

'칠리' 항목이 있는 레코드는 하나뿐입니다.

21번 라인 – 30번 라인:

예 2: 여러 조건

위치 및 수량 속성을 기반으로 레코드를 필터링해 보겠습니다. 수량은 50보다 크고 300보다 작아야 합니다. 위치는 'USA'여야 합니다.

쿼리는 ' 내가 from country_prices
여기서 i.quantity > 50
여기서 i.quantity < 300
여기서 i.location == '미국'
나 선택”

//여러 조건을 지정하여 레코드를 필터링할 위치를 선택합니다.
~였다 데이터 = ~에서 ~에 국가_가격
어디 . 수량 > 오십
어디 . 수량 < 300
어디 . 위치 == '미국'
선택하다 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}

산출:

이전 조건과 일치하는 레코드가 두 개 있습니다.

21번 라인 – 32번 라인:

예 3: 및(&&) 연산자

'and(&&)' 연산자를 지정하여 한 번에 여러 조건을 지정할 수 있습니다. 모든 조건이 참이면 모든 조건을 만족하는 레코드가 쿼리에 의해 반환됩니다.

이 예에서는 수량이 20보다 크고 비용이 67.89인 경우 레코드를 선택합니다.

쿼리는 ' 내가 from country_prices
여기서 i.quantity < 20 && i.cost == 67.89
나 선택”

~였다 데이터 = ~에서 ~에 국가_가격
어디 . 수량 < 이십 && . 비용 == 67.89
선택하다 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}

산출:

수량이 20개 미만이고 비용이 67.89인 레코드는 하나뿐입니다.

21번 라인 – 29번 라인:

예 4: 또는(||) 연산자

'또는(||)' 연산자는 한 번에 여러 조건을 지정하는 데에도 사용됩니다. 하나 이상의 조건이 참이면 해당 조건을 충족하는 레코드가 반환됩니다.

이 예에서는 수량이 300보다 크거나 위치가 'Tokyo'인 경우 레코드를 선택합니다.

쿼리는 ' 내가 from country_prices
여기서 i.quantity > 300 || i.location == '도쿄'
나 선택”

~였다 데이터 = ~에서 ~에 국가_가격
어디 . 수량 > 300 || . 위치 == '도쿄'
선택하다 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}

산출:

수량이 300보다 큰 레코드는 하나만 있습니다(첫 번째 조건이 일치됨).

21번 라인 – 29번 라인:

3. 주문 기준

LINQ 쿼리에서 반환된 레코드를 특성의 값을 기준으로 오름차순 또는 내림차순으로 정렬하려는 경우 쿼리에서 'order by' 연산자를 사용할 수 있습니다. 'select' 연산자 앞에 이 연산자를 지정해야 합니다.

통사론:

LINQ 쿼리 내에서 'order by' 연산자를 사용하는 방법을 살펴보겠습니다.

오름차순:

~에서 반복자 ~에 데이터 소스
주문하다 ~에 의해 반복자 . 기인하다 오름차순
선택하다 반복자 ;

내림차순:

~에서 반복자 ~에 데이터 소스
주문하다 ~에 의해 반복자 . 기인하다 내림차순
선택하다 반복자 ;

예 1: 오름차순

데이터 소스(목록)에서 모든 속성을 선택하고 수량 속성의 값을 기준으로 오름차순으로 반환합니다.

쿼리는 ' 내가 from country_prices
orderby i.quantity 오름차순
나 선택”

~였다 데이터 = ~에서 ~에 국가_가격
내가 주문 . 수량 오름차순
선택하다 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}

산출:

21번 라인 – 29번 라인:

예 2: 내림차순

데이터 소스(목록)에서 모든 속성을 선택하고 비용 속성의 값을 기준으로 내림차순으로 반환합니다.

쿼리는 ' 내가 from country_prices
orderby i.cost 내림차순
나 선택”

~였다 데이터 = ~에서 ~에 국가_가격
내가 주문 . 비용 내림차순
선택하다 ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}

산출:

21번 라인 – 29번 라인:

4. 한도

SQL 제한은 쿼리에서 반환되는 레코드를 제한합니다. 쿼리에서 반환되는 상위 레코드를 반환합니다. LINQ에서는 Take() 연산자와 함께 Skip()을 활용하여 이를 달성할 수 있습니다. Take()는 지정된 수의 레코드를 가져옵니다. Skip()은 시작 레코드 번호를 지정하는 데 사용됩니다. 이러한 방식으로 LINQ의 '제한' 기능을 구현할 수 있습니다.

통사론:

( ~에서 반복자 ~에 데이터 소스
선택하다 반복자 ) . 건너뛰다 ( N ) . 가져가다 ( N ) ;
  1. Skip()은 레코드를 건너뛰고 나머지 레코드를 반환하는 데 사용됩니다. 건너뛸 요소 수를 지정하는 정수를 사용합니다. 우리의 경우 0입니다.
  2. Take()는 첫 번째 레코드에서 'n'개의 레코드를 가져오는 데 사용됩니다.

예:

쿼리에서 반환된 5개의 레코드 중 처음 3개의 레코드를 선택합니다.

쿼리는 ' (나에서 country_prices
선택 i).건너뛰기(0).테이크(3)”

~였다 데이터 = ( ~에서 ~에 국가_가격
선택하다 ) . 건너뛰다 ( 0 ) . 가져가다 ( ) ;

각각 ( ~였다 ~에 데이터 )
{
콘솔 . WriteLine ( . 안건 + ' ' + . 위치 + ' ' + . 수량 + ' ' + . 비용 ) ;

}

}

산출:

21번 라인 – 28번 라인:

결론

SQL과 유사한 C# LINQ에서 쿼리를 작성하는 방법을 배웠습니다. 이 자습서의 일부로 '선택' 연산자를 사용하여 데이터 원본에서 레코드를 선택하는 방법에 대해 설명했습니다. 쿼리에서 반환되는 레코드를 필터링하기 위해 조건을 지정하여 'where' 연산자를 사용했습니다. 그런 다음 'order by' 연산자를 사용하여 쿼리에서 반환된 레코드를 정렬하는 방법을 배웠습니다. 마지막으로 레코드를 제한하기 위해 Skip() 및 Take() 연산자를 활용했습니다.