이 항목에서는 Visual Basic의 LINQ(Language-Integrated Query) 식과 쿼리에서 수행하는 일반적인 종류의 작업에 대해 간략하게 소개합니다. 자세한 내용은 다음 항목을 참조하세요.
Visual Basic LINQ 소개
데이터 원본 지정(부터)
LINQ 쿼리에서 첫 번째 단계는 쿼리할 데이터 원본을 지정하는 것입니다. 따라서 쿼리에서 From
절은 항상 먼저 위치합니다. 쿼리 연산자는 원본의 형식에 따라 결과를 선택하고 셰이프합니다.
Dim query = From cust In customers
' ...
이 절은 From
데이터 원본 customers
및 범위 변수cust
를 지정합니다. 범위 변수는 쿼리 식에서 실제 반복이 발생하지 않는다는 점을 제외하고 루프 반복 변수와 같습니다. 쿼리가 For Each
실행될 때, 종종 루프를 통해, 범위 변수는 customers
에 있는 각 연속 요소의 참조 대상으로 작용합니다. 컴파일러는 형식 cust
을 유추할 수 있으므로 명시적으로 지정할 필요가 없습니다. 명시적 입력을 사용 및 사용하지 않고 작성된 쿼리의 예는 쿼리 작업의 형식 관계(Visual Basic)를 참조하세요.
Visual Basic에서 절을 사용하는 From
방법에 대한 자세한 내용은 From 절을 참조하세요.
데이터 필터링(위치)
가장 일반적인 쿼리 작업은 부울 식의 형태로 필터를 적용하는 것입니다. 그런 다음 쿼리는 표현식이 참인 요소만 반환합니다.
Where
절은 필터링을 수행하는 데 사용됩니다. 필터는 결과 시퀀스에 포함할 데이터 원본의 요소를 지정합니다. 다음 예제에서는 런던에 주소가 있는 고객만 포함됩니다.
Dim londonCusts = From cust In customers
Where cust.City = "London"
' ...
And
및 Or
와 같은 논리 연산자를 사용하여 Where
절에서 필터 식을 결합할 수 있습니다. 예를 들어 런던 출신이고 이름이 Devon인 고객만 반환하려면 다음 코드를 사용합니다.
Where cust.City = "London" And cust.Name = "Devon"
런던 또는 파리에서 고객을 반환하려면 다음 코드를 사용합니다.
Where cust.City = "London" Or cust.City = "Paris"
Visual Basic에서 절을 사용하는 Where
방법에 대한 자세한 내용은 Where 절을 참조하세요.
데이터 정렬(정렬 기준)
반환된 데이터를 특정 순서로 정렬하는 것이 편리한 경우가 많습니다. 이 Order By
절을 사용하면 반환된 시퀀스의 요소가 지정된 필드나 필드에 정렬됩니다. 예를 들어 다음 쿼리는 속성에 따라 결과를 정렬합니다 Name
.
Name
문자열이므로 반환된 데이터는 A에서 Z로 사전순으로 정렬됩니다.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
결과를 역순으로 정렬하려면 Z에서 A로 절을 Order By...Descending
사용합니다. 기본값은 Ascending
둘 다 지정되지 않은 Ascending
Descending
경우입니다.
Visual Basic에서 Order By
절을 사용하는 방법에 대한 자세한 내용은 Order By 절을 참조하십시오.
데이터 선택(선택)
이 절은 Select
반환된 요소의 양식과 내용을 지정합니다. 예를 들어 결과가 전체 Customer
개체, 하나의 Customer
속성, 속성의 하위 집합, 다양한 데이터 원본의 속성 조합 또는 계산을 기반으로 하는 몇 가지 새 결과 형식으로 구성될지 여부를 지정할 수 있습니다. 절이 Select
원본 요소의 복사본이 아닌 다른 항목을 생성하는 경우 연산을 프로젝션이라고 합니다.
전체 Customer
개체로 구성된 컬렉션을 검색하려면 범위 변수 자체를 선택합니다.
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Customer
인스턴스가 필드가 많은 큰 개체이고 검색하려는 이름만 있으면 다음 예제와 같이 선택할 cust.Name
수 있습니다. 로컬 형식 유추는 결과 형식을 개체 컬렉션에서 문자열 컬렉션 Customer
으로 변경한다는 것을 인식합니다.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
데이터 원본에서 여러 필드를 선택하려면 다음 두 가지 옵션을 선택할 수 있습니다.
절에서
Select
결과에 포함할 필드를 지정합니다. 컴파일러는 해당 필드를 속성으로 포함하는 익명 형식을 정의합니다. 자세한 내용은 익명 형식을 참조하세요.다음 예제에서 반환된 요소는 익명 형식의 인스턴스이므로 코드의 다른 위치에서 이름으로 형식을 참조할 수 없습니다. 형식의 컴파일러 지정 이름에는 일반 Visual Basic 코드에서 유효하지 않은 문자가 포함됩니다. 다음 예제에서 쿼리
londonCusts4
에서 반환되는 컬렉션의 요소는 익명 형식의 인스턴스입니다.Dim londonCusts4 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select Name = cust.Name, Phone = cust.Phone For Each londonCust In londonCusts4 Console.WriteLine(londonCust.Name & " " & londonCust.Phone) Next
-또는-
결과에 포함할 특정 필드를 포함하는 명명된 형식을 정의하고 절에
Select
형식의 인스턴스를 만들고 초기화합니다. 반환되는 컬렉션 외부에서 개별 결과를 사용해야 하거나 메서드 호출에서 매개 변수로 전달해야 하는 경우에만 이 옵션을 사용합니다. 다음 예제의londonCusts5
형식은 IEnumerable(Of NamePhone)입니다.Public Class NamePhone Public Name As String Public Phone As String ' Additional class elements End Class
Dim londonCusts5 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select New NamePhone With {.Name = cust.Name, .Phone = cust.Phone}
Visual Basic에서 절을 사용하는 Select
방법에 대한 자세한 내용은 Select 절을 참조하세요.
데이터 조인(조인 및 그룹 조인)
From
절에서 둘 이상의 데이터 원본을 여러 가지 방법으로 결합할 수 있습니다. 예를 들어 다음 코드는 두 데이터 원본을 사용하고 결과에서 두 데이터 원본의 속성을 암시적으로 결합합니다. 쿼리는 성의 첫 글자가 모음인 학생을 선택합니다.
Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
Where student.Last.IndexOf(vowel) = 0
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
For Each vName In vowelNames
Console.WriteLine(vName.Initial & ": " & vName.Name)
Next
비고
방법: 항목 목록 만들기에서 만든 학생 목록으로 이 코드를 실행할 수 있습니다.
Join
키워드는 SQL의 키워드와 INNER JOIN
동일합니다. 두 컬렉션의 요소 간에 일치하는 키 값을 기반으로 두 컬렉션을 결합합니다. 쿼리는 키 값이 일치하는 컬렉션 요소의 전체 또는 일부를 반환합니다. 예를 들어 다음 코드는 이전 암시적 조인의 동작을 복제합니다.
Dim vowelNames2 = From student In students
Join vowel In vowels
On student.Last(0) Equals vowel
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
Group Join
는 SQL에서와 마찬가지로 컬렉션을 단일 계층적 컬렉션으로 LEFT JOIN
결합합니다. 자세한 내용은 Join 절 및 그룹 조인 절을 참조하세요.
데이터 그룹화(그룹 기준)
하나 이상의 요소 필드에 따라 쿼리 결과의 요소를 그룹화할 절을 추가할 Group By
수 있습니다. 예를 들어 다음 코드는 학생을 수업 연도별로 그룹화합니다.
Dim studentsByYear = From student In students
Select student
Group By year = student.Year
Into Classes = Group
For Each yearGroup In studentsByYear
Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
For Each student In yearGroup.Classes
Console.WriteLine(" " & student.Last & ", " & student.First)
Next
Next
방법: 항목 목록 만들기에서 만든 학생 목록을 사용하여 이 코드를 실행하면, For Each
문의 결과는 다음과 같습니다.
연도: 주니어
터커, 마이클
가르시아, 휴고
가르시아, 데브라
터커, 랜스
연도: 시니어
오멜첸코, 스베틀라나
오사다 시
파쿠리, 파디
펑, 하닝
애덤스, 테리
연도: 신입생
모텐슨, 스벤
가르시아, 세자르
다음 코드의 변형은 수업 연도를 정렬한 다음 각 연도별로 학생들을 성에 따라 정렬합니다.
Dim studentsByYear2 = From student In students
Select student
Order By student.Year, student.Last
Group By year = student.Year
Into Classes = Group
더 많은 Group By
정보는 Group By 절을 참조하세요.
참고하십시오
.NET