기본 쿼리 작업(Visual Basic)
이 항목에서는 Visual Basic의 LINQ(Language-Integrated Query) 식과 쿼리에서 수행하는 일반적인 종류의 작업에 대해 간략하게 소개합니다. 자세한 내용은 아래 항목을 참조하세요.
데이터 원본 지정(From)
LINQ 쿼리에서 첫 번째 단계는 쿼리할 데이터 원본을 지정하는 것입니다. 따라서 쿼리의 From
절이 항상 먼저 제공됩니다. 쿼리 연산자는 원본의 형식에 따라 결과를 선택하고 셰이프합니다.
Dim query = From cust In customers
' ...
From
절은 데이터 원본, customers
및 범위 변수cust
을(를) 지정합니다. 범위 변수는 쿼리 식에서 실제 반복이 발생하지 않는다는 점을 제외하고 루프 반복 변수와 같습니다. 종종 For Each
루프를 사용하여 쿼리가 실행될 때 범위 변수는 customers
의 각 연속 요소에 대한 참조 역할을 합니다. 컴파일러에서 cust
형식을 유추할 수 있으므로 명시적으로 지정할 필요가 없습니다. 명시적 타이핑이 있는 경우와 없는 경우의 쿼리 작성 예는 쿼리 작업의 형식 관계(Visual Basic)를 참조하세요.
Visual Basic에서 From
절을 사용하는 방법에 대한 자세한 내용은 From 절을 참조하세요.
데이터 필터링(Where)
아마도 가장 일반적인 쿼리 작업은 부울 식의 형태로 필터를 적용하는 것일 것입니다. 그런 다음 쿼리는 식이 true인 요소만 반환합니다. 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)
반환된 데이터를 특정 순서로 정렬하면 편리합니다. Order By
절을 사용하면 반환된 시퀀스의 요소가 지정된 필드나 여러 필드에 정렬됩니다. 예를 들어 다음 쿼리는 Name
속성에 따라 결과를 정렬합니다. Name
은(는) 문자열이므로 반환된 데이터는 A부터 Z의 알파벳 순으로 정렬됩니다.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
결과를 역순으로 정렬하려면 Order By...Descending
절을 사용합니다. Ascending
또는 Descending
이(가) 지정되지 않은 경우 기본값은 Ascending
입니다.
Visual Basic에서 Order By
절을 사용하는 방법에 대한 자세한 내용은 Order By 절을 참조하세요.
데이터 선택(Select)
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 절을 참조하세요.
데이터 조인(Join 및 Group Join)
여러 가지 방법으로 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 Join 절을 참조하세요.
데이터 그룹화(Group By)
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
문의 출력은 다음과 같습니다.
3학년
Tucker, Michael
Garcia, Hugo
Garcia, Debra
Tucker, Lance
4학년
Omelchenko, Svetlana
Osada, Michiko
Fakhouri, Fadi
Feng, Hanying
Adams, Terry
1학년
Mortensen, Sven
Garcia, Cesar
다음 코드에 표시된 변형은 학생을 졸업 연도를 정렬한 다음 각 학년 별로 성의 첫 글자의 알파벳 순으로 정렬합니다.
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