Visual Basic의 LINQ 소개

LINQ(Language-Integrated Query)는 쿼리 기능을 Visual Basic에 추가하고 모든 종류의 데이터로 작업할 때 간단하면서도 강력한 기능을 제공합니다. 처리될 쿼리를 데이터베이스에 보내거나 검색하고 있는 데이터의 형식마다 다른 쿼리 구문으로 작업하는 대신, LINQ에서는 Visual Basic 언어의 일부로 쿼리를 도입합니다. LINQ는 데이터의 형식에 관계없이 통합된 구문을 사용합니다.

LINQ를 사용하면 SQL Server 데이터베이스, XML, 메모리 내 배열 및 컬렉션, ADO.NET 데이터 세트 또는 LINQ를 지원하는 다른 모든 원격 또는 로컬 데이터 소스에서 데이터를 쿼리할 수 있습니다. 일반적인 Visual Basic 언어 요소를 사용하여 이 모든 작업을 수행할 수 있습니다. 쿼리가 Visual Basic 언어로 작성되기 때문에 쿼리 결과는 강력한 형식의 개체로 반환됩니다. 이러한 개체는 런타임 대신 컴파일 시간에 쿼리에서 더 빠르게 코드를 작성하고 오류를 catch할 수 있도록 하는 IntelliSense를 지원합니다. LINQ 쿼리를 추가 쿼리의 소스로 사용하여 결과를 구체화할 수 있습니다. 또한 사용자가 쿼리 결과를 쉽게 보고 수정할 수 있도록 LINQ 쿼리를 컨트롤에 바인딩할 수 있습니다.

예를 들어 다음 코드 예제에서는 컬렉션에서 고객의 목록을 반환하고 고객의 위치를 기준으로 고객을 그룹화하는 LINQ 쿼리를 보여 줍니다.

' Obtain a list of customers.
Dim customers As List(Of Customer) = GetCustomers()

' Return customers that are grouped based on country.
Dim countries = From cust In customers
                Order By cust.Country, cust.City
                Group By CountryName = cust.Country
                Into CustomersInCountry = Group, Count()
                Order By CountryName

' Output the results.
For Each country In countries
    Debug.WriteLine(country.CountryName & " count=" & country.Count)

    For Each customer In country.CustomersInCountry
        Debug.WriteLine("   " & customer.CompanyName & "  " & customer.City)
    Next
Next

' Output:
'   Canada count=2
'      Contoso, Ltd  Halifax
'      Fabrikam, Inc.  Vancouver
'   United States count=1
'      Margie's Travel  Redmond

예제 실행

소개 및 LINQ 쿼리의 구조체 섹션의 예제를 실행하려면 고객과 주문의 목록을 반환하는 다음 코드를 포함합니다.

' Return a list of customers.
Private Function GetCustomers() As List(Of Customer)
    Return New List(Of Customer) From
        {
            New Customer With {.CustomerID = 1, .CompanyName = "Contoso, Ltd", .City = "Halifax", .Country = "Canada"},
            New Customer With {.CustomerID = 2, .CompanyName = "Margie's Travel", .City = "Redmond", .Country = "United States"},
            New Customer With {.CustomerID = 3, .CompanyName = "Fabrikam, Inc.", .City = "Vancouver", .Country = "Canada"}
        }
End Function

' Return a list of orders.
Private Function GetOrders() As List(Of Order)
    Return New List(Of Order) From
        {
            New Order With {.CustomerID = 1, .Amount = "200.00"},
            New Order With {.CustomerID = 3, .Amount = "600.00"},
            New Order With {.CustomerID = 1, .Amount = "300.00"},
            New Order With {.CustomerID = 2, .Amount = "100.00"},
            New Order With {.CustomerID = 3, .Amount = "800.00"}
        }
End Function

' Customer Class.
Private Class Customer
    Public Property CustomerID As Integer
    Public Property CompanyName As String
    Public Property City As String
    Public Property Country As String
End Class

' Order Class.
Private Class Order
    Public Property CustomerID As Integer
    Public Property Amount As Decimal
End Class

LINQ 공급자

LINQ 공급자는 Visual Basic LINQ 쿼리를 쿼리 중인 데이터 원본에 매핑합니다. LINQ 쿼리를 작성하는 경우 공급자는 해당 쿼리를 가져와서 데이터 소스가 실행할 수 있을 명령으로 변환합니다. 또한 공급자는 소스의 데이터를 쿼리 결과를 구성하는 개체로 변환합니다. 마지막으로 공급자는 데이터 소스에 업데이트를 보낼 때 개체를 데이터로 변환합니다.

Visual Basic에는 다음 LINQ 공급자가 포함됩니다.

공급자 설명
LINQ to Objects LINQ to Objects 공급자를 사용하면 메모리 내 컬렉션 및 배열을 쿼리할 수 있습니다. 개체가 IEnumerable 또는 IEnumerable<T> 인터페이스를 지원하는 경우 LINQ to Objects 공급자를 사용하면 개체를 쿼리할 수 있습니다.

모든 Visual Basic 프로젝트의 경우 기본적으로 가져오는 System.Linq 네임스페이스를 가져와서 LINQ to Objects 공급자를 사용하도록 설정할 수 있습니다.

LINQ to Objects 공급자에 대한 자세한 내용은 LINQ to Objects를 참조하세요.
LINQ to SQL LINQ to SQL 공급자를 사용하면 SQL Server 데이터베이스의 데이터를 쿼리하고 수정할 수 있습니다. 이렇게 하면 애플리케이션의 개체 모델을 데이터베이스의 테이블 및 개체에 쉽게 매핑할 수 있습니다.

Visual Basic에는 O/R 디자이너(개체 관계형 디자이너)가 포함되어 있으므로 LINQ to SQL로 더 쉽게 작업할 수 있습니다. 이 디자이너는 데이터베이스의 개체에 매핑되는 애플리케이션의 개체 모델을 만드는 데 사용됩니다. 또한 O/R 디자이너는 저장 프로시저 및 함수를 DataContext 개체에 매핑하는 기능도 제공합니다. 이 개체는 데이터베이스와의 통신을 관리하고 낙관적 동시성 검사에 대한 상태를 저장합니다.

LINQ to SQL 공급자에 대한 자세한 내용은 LINQ to SQL을 참조하세요. 개체 관계형 디자이너에 대한 자세한 내용은 Visual Studio의 LINQ to SQL 도구를 참조하세요.
LINQ to XML LINQ to XML 공급자를 사용하면 XML을 쿼리하고 수정할 수 있습니다. 메모리 내 XML을 수정하거나 XML을 파일에서 로드하고 파일에 저장할 수 있습니다.

또한 LINQ to XML 공급자는 Visual Basic 코드에서 직접 XML을 작성하는 데 사용할 수 있는 XML 리터럴 및 XML 축 속성을 사용하도록 설정합니다. 자세한 내용은 XML을 참조하세요.
LINQ to DataSet LINQ to DataSet 공급자를 사용하면 ADO.NET 데이터 세트에서 데이터를 쿼리하고 업데이트할 수 있습니다. 데이터 세트의 데이터를 쿼리, 집계 및 업데이트하는 기능을 단순화하고 확장하기 위해 데이터 세트을 사용하는 애플리케이션에 LINQ의 기능을 추가할 수 있습니다.

자세한 내용은 LINQ to DataSet을 참조하세요.

LINQ 쿼리의 구조체

흔히 쿼리 식이라고 하는 LINQ 쿼리는 쿼리의 데이터 소스와 반복 변수를 식별하는 쿼리 절의 조합으로 구성되어 있습니다. 쿼리 식에는 소스 데이터에 적용할 정렬, 필터링, 그룹화 및 조인 또는 계산을 위한 명령도 포함될 수 있습니다. 쿼리 식 구문은 SQL의 구문과 유사하므로 구문의 상당 부분이 익숙하게 느껴질 수 있습니다.

쿼리 식은 From 절로 시작됩니다. 이 절은 쿼리의 소스 데이터와 소스 데이터의 각 요소를 개별적으로 참조하는 데 사용되는 변수를 식별합니다. 이러한 변수를 범위 변수 또는 반복 변수라고 합니다. From 절은 From 절이 선택 사항인 Aggregate 쿼리를 제외한 쿼리에 필수적입니다. 쿼리의 범위와 소스가 From 또는 Aggregate 절에서 식별된 후 쿼리 절의 조합을 포함하여 쿼리를 구체화할 수 있습니다. 쿼리 절에 대한 자세한 내용은 이 항목의 뒷부분에 있는 Visual Basic LINQ 쿼리 연산자를 참조하세요. 예를 들어 다음 쿼리는 고객 데이터의 소스 컬렉션을 customers 변수로 식별하고 cust라는 반복 변수를 식별합니다.

Dim customers = GetCustomers()

Dim queryResults = From cust In customers

For Each result In queryResults
    Debug.WriteLine(result.CompanyName & "  " & result.Country)
Next

' Output:
'   Contoso, Ltd  Canada
'   Margie's Travel  United States
'   Fabrikam, Inc.  Canada

이 예제는 그 자체로 유효한 쿼리이지만 쿼리는 쿼리 절을 더 추가하여 결과를 구체화할 때 훨씬 더 강력해집니다. 예를 들어 Where 절을 추가하여 하나 이상의 값을 기준으로 결과를 필터링할 수 있습니다. 쿼리 식은 코드 한 줄입니다. 추가 쿼리 절을 쿼리의 끝에 추가하기만 하면 됩니다. 밑줄(_) 줄 연속 문자를 사용하여 여러 줄의 텍스트로 쿼리를 분할하는 방법으로 가독성을 높일 수 있습니다. 다음 코드 예제에서는 Where 절이 포함된 쿼리의 예를 보여 줍니다.

Dim queryResults = From cust In customers
                   Where cust.Country = "Canada"

다른 강력한 쿼리 절은 데이터 소스에서 선택된 필드만 반환하는 데 사용할 수 있는 Select 절입니다. LINQ 쿼리는 강력한 형식의 개체로 구성된 열거 가능한 컬렉션을 반환합니다. 쿼리는 무명 형식 또는 명명된 형식의 컬렉션을 반환할 수 있습니다. Select 절을 사용하여 데이터 소스에서 단일 필드만 반환할 수 있습니다. 이렇게 하는 경우 반환된 컬렉션의 형식은 단일 필드의 형식입니다. 또한 Select 절을 사용하여 데이터 소스에서 여러 필드를 반환할 수도 있습니다. 이렇게 하는 경우 반환된 컬렉션의 형식은 새로운 무명 형식입니다. 또한 쿼리가 반환하는 필드를 지정된 명명된 형식의 필드와 일치시킬 수도 있습니다. 다음 코드 예제에서는 데이터 소스의 선택된 필드에서 제공된 데이터로 채워진 멤버가 있는 무명 형식의 컬렉션을 반환하는 쿼리 식을 보여 줍니다.

Dim queryResults = From cust In customers
               Where cust.Country = "Canada"
               Select cust.CompanyName, cust.Country

LINQ 쿼리를 사용하여 여러 데이터 소스를 결합하고 단일 결과를 반환할 수도 있습니다. 이 작업은 하나 이상의 From 절을 사용하거나 Join 또는 Group Join 쿼리 절을 사용하여 수행할 수 있습니다. 다음 코드 예제에서는 고객 및 주문 데이터를 결합하고 고객 및 주문 데이터가 포함된 무명 형식의 컬렉션을 반환하는 쿼리 식을 보여 줍니다.

Dim customers = GetCustomers()
Dim orders = GetOrders()

Dim queryResults = From cust In customers, ord In orders
           Where cust.CustomerID = ord.CustomerID
           Select cust, ord

For Each result In queryResults
    Debug.WriteLine(result.ord.Amount & "  " & result.ord.CustomerID & "  " & result.cust.CompanyName)
Next

' Output:
'   200.00  1  Contoso, Ltd
'   300.00  1  Contoso, Ltd
'   100.00  2  Margie's Travel
'   600.00  3  Fabrikam, Inc.
'   800.00  3  Fabrikam, Inc.

Group Join 절을 사용하여 고객 개체의 컬렉션이 포함된 계층적 쿼리 결과를 만들 수 있습니다. 각 고객 개체에는 해당 고객에 대한 모든 주문의 컬렉션이 포함된 속성이 있습니다. 다음 코드 예제에서는 계층적 결과로 고객 및 주문 데이터를 결합하고 무명 형식의 컬렉션을 반환하는 쿼리 식을 보여 줍니다. 쿼리는 고객에 대한 주문 데이터의 컬렉션을 포함하는 CustomerOrders 속성이 포함된 형식을 반환합니다. 또한 해당 고객에 대한 모든 주문의 총계 합이 포함된 OrderTotal 속성도 포함합니다. 이 쿼리는 LEFT OUTER JOIN과 동일합니다.

Dim customers = GetCustomers()
Dim orders = GetOrders()

Dim queryResults = From cust In customers
                   Group Join ord In orders On
                     cust.CustomerID Equals ord.CustomerID
                     Into CustomerOrders = Group,
                          OrderTotal = Sum(ord.Amount)
                   Select cust.CompanyName, cust.CustomerID,
                          CustomerOrders, OrderTotal

For Each result In queryResults
    Debug.WriteLine(result.OrderTotal & "  " & result.CustomerID & "  " & result.CompanyName)
    For Each ordResult In result.CustomerOrders
        Debug.WriteLine("   " & ordResult.Amount)
    Next
Next

' Output:
'   500.00  1  Contoso, Ltd
'      200.00
'      300.00
'   100.00  2  Margie's Travel
'      100.00
'   1400.00  3  Fabrikam, Inc.
'      600.00
'      800.00

강력한 쿼리 식을 만드는 데 사용할 수 있는 몇 가지 추가 LINQ 쿼리 연산자가 있습니다. 이 항목의 다음 섹션에서는 쿼리 식에 포함할 수 있는 다양한 쿼리 절에 대해 설명합니다. Visual Basic 쿼리 절에 대한 자세한 내용은 쿼리를 참조하세요.

Visual Basic LINQ 쿼리 연산자

System.Linq 네임스페이스와 LINQ 쿼리를 지원하는 다른 네임스페이스의 클래스에는 애플리케이션의 요구 사항에 따라 쿼리를 만들고 구체화하기 위해 호출할 수 있는 메서드가 포함되어 있습니다. Visual Basic에는 다음과 같은 일반적인 쿼리 절에 대한 키워드가 포함되어 있습니다. Visual Basic 쿼리 절에 대한 자세한 내용은 쿼리를 참조하세요.

원본 절

From이나 Aggregate 절은 쿼리를 시작하는 데 필요합니다. From 절은 쿼리의 소스 컬렉션과 반복 변수를 지정합니다. 예시:

' Returns the company name for all customers for which
' the Country is equal to "Canada".
Dim names = From cust In customers
            Where cust.Country = "Canada"
            Select cust.CompanyName

Select 절

선택 사항. Select은 쿼리에 대한 반복 변수 집합을 선언합니다. 예시:

' Returns the company name and ID value for each
' customer as a collection of a new anonymous type.
Dim customerList = From cust In customers
                   Select cust.CompanyName, cust.CustomerID

Select 절이 지정되지 않은 경우 쿼리의 반복 변수는 From 또는 Aggregate 절에서 지정된 반복 변수로 구성됩니다.

Where 절

선택 사항. Where은 쿼리에 대한 필터링 조건을 지정합니다. 예시:

' Returns all product names for which the Category of
' the product is "Beverages".
Dim names = From product In products
            Where product.Category = "Beverages"
            Select product.Name

Order By 절

선택 사항. Order By은 쿼리의 열에 대한 정렬 순서를 지정합니다. 예시:

' Returns a list of books sorted by price in 
' ascending order.
Dim titlesAscendingPrice = From b In books
                           Order By b.price

Join 절

선택 사항. Join은 두 컬렉션을 단일 컬렉션으로 결합합니다. 예시:

' Returns a combined collection of all of the 
' processes currently running and a descriptive
' name for the process taken from a list of 
' descriptive names.
Dim processes = From proc In Process.GetProcesses
                Join desc In processDescriptions
                  On proc.ProcessName Equals desc.ProcessName
                Select proc.ProcessName, proc.Id, desc.Description

Group By 절

선택 사항. Group By은 쿼리 결과의 요소를 그룹화합니다. 각 그룹에 집계 함수를 적용하는 데 이를 사용할 수 있습니다. 예시:

' Returns a list of orders grouped by the order date
' and sorted in ascending order by the order date.
Dim orderList = From order In orders
                Order By order.OrderDate
                Group By OrderDate = order.OrderDate
                Into OrdersByDate = Group

Group Join 절

선택 사항. Group Join은 두 컬렉션을 단일 계층형 컬렉션으로 결합합니다. 예시:

' Returns a combined collection of customers and
' customer orders.
Dim customerList = From cust In customers
                   Group Join ord In orders On
                     cust.CustomerID Equals ord.CustomerID
                   Into CustomerOrders = Group,
                        TotalOfOrders = Sum(ord.Amount)
                   Select cust.CompanyName, cust.CustomerID,
                          CustomerOrders, TotalOfOrders

Aggregate 절

쿼리를 시작하려면 Aggregate 또는 From 절이 필요합니다. Aggregate 절은 하나 이상의 집계 함수를 컬렉션에 적용합니다. 예를 들어 다음 예제와 같이 Aggregate 절을 사용하여 쿼리가 반환한 모든 요소의 합계를 계산할 수 있습니다.

' Returns the sum of all order amounts.
Dim orderTotal = Aggregate order In orders
                 Into Sum(order.Amount)

또한 Aggregate 절을 사용하여 쿼리를 수정할 수 있습니다. 예를 들어 Aggregate 절을 사용하여 관련된 쿼리 컬렉션에 대한 계산을 수행할 수 있습니다. 예시:

' Returns the customer company name and largest 
' order amount for each customer.
Dim customerMax = From cust In customers
                  Aggregate order In cust.Orders
                  Into MaxOrder = Max(order.Amount)
                  Select cust.CompanyName, MaxOrder

Let 절

선택 사항. Let은 값을 계산하고 쿼리의 새 변수에 할당합니다. 예시:

' Returns a list of products with a calculation of
' a ten percent discount.
Dim discountedProducts = From prod In products
                         Let Discount = prod.UnitPrice * 0.1
                         Where Discount >= 50
                         Select prod.Name, prod.UnitPrice, Discount

Distinct 절

선택 사항. Distinct 절은 쿼리 결과에서 중복 값을 제거하기 위해 현재 반복 변수의 값을 제한합니다. 예시:

' Returns a list of cities with no duplicate entries.
Dim cities = From item In customers
             Select item.City
             Distinct

Skip 절

선택 사항. Skip은 컬렉션에서 지정된 수의 요소를 무시하고 나머지 요소를 반환합니다. 예시:

' Returns a list of customers. The first 10 customers
' are ignored and the remaining customers are
' returned.
Dim customerList = From cust In customers
                   Skip 10

Skip While 절

선택 사항. Skip While은 지정된 조건이 true면 컬렉션에 있는 요소를 무시하고 나머지 요소를 반환합니다. 예시:

' Returns a list of customers. The query ignores all
' customers until the first customer for whom
' IsSubscriber returns false. That customer and all
' remaining customers are returned.
Dim customerList = From cust In customers
                   Skip While IsSubscriber(cust)

Take 절

선택 사항. Take은 컬렉션의 시작 위치에서 지정된 수의 연속 요소를 반환합니다. 예시:

' Returns the first 10 customers.
Dim customerList = From cust In customers
                   Take 10

Take While 절

선택 사항. Take While은 지정된 조건이 true면 컬렉션의 요소를 포함하고 나머지 요소를 무시합니다. 예시:

' Returns a list of customers. The query returns
' customers until the first customer for whom 
' HasOrders returns false. That customer and all 
' remaining customers are ignored.
Dim customersWithOrders = From cust In customers
                          Order By cust.Orders.Count Descending
                          Take While HasOrders(cust)

추가 LINQ 쿼리 기능 사용

LINQ에서 제공하는 열거 가능 형식과 쿼리 가능 형식의 멤버를 호출하여 추가 LINQ 쿼리 기능을 사용할 수 있습니다. 쿼리 식의 결과에 대해 특정 쿼리 연산자를 호출하여 이러한 추가 기능을 사용할 수 있습니다. 예를 들어 다음 예제에서는 Enumerable.Union 메서드를 사용하여 두 쿼리의 결과를 하나의 쿼리 결과로 결합합니다. 이 예제에서는 Enumerable.ToList 메서드를 사용하여 쿼리 결과를 제네릭 목록으로 반환합니다.

Public Function GetAllCustomers() As List(Of Customer)
    Dim customers1 = From cust In domesticCustomers
    Dim customers2 = From cust In internationalCustomers

    Dim customerList = customers1.Union(customers2)

    Return customerList.ToList()
End Function

추가 LINQ 기능에 대한 자세한 내용은 표준 쿼리 연산자 개요를 참조하세요.

LINQ to SQL을 사용하여 데이터베이스에 연결

Visual Basic에서는 LINQ to SQL 파일을 사용하여 액세스하려는 테이블, 뷰, 저장 프로시저와 같은 SQL Server 데이터베이스 개체를 식별합니다. LINQ to SQL 파일의 확장명은 .dbml입니다.

SQL Server 데이터베이스에 대한 유효한 연결이 있는 경우 LINQ to SQL 클래스 항목 템플릿을 프로젝트에 추가할 수 있습니다. 이렇게 하면 O/R 디자이너(개체 관계형 디자이너)가 표시됩니다. O/R 디자이너에서는 코드에서 액세스하려는 항목을 서버 탐색기/데이터베이스 탐색기에서 디자이너 화면으로 끌 수 있습니다. LINQ to SQL 파일은 DataContext 개체를 프로젝트에 추가합니다. 이 개체에는 액세스하려는 테이블과 뷰의 속성 및 컬렉션과 호출하려는 저장 프로시저의 메서드가 포함되어 있습니다. 변경 내용을 LINQ to SQL(.dbml) 파일에 저장한 후 O/R 디자이너에서 정의된 DataContext 개체를 참조하여 코드에서 이러한 개체에 액세스할 수 있습니다. 프로젝트의 DataContext 개체는 LINQ to SQL 파일의 이름에 따라 명명됩니다. 예를 들어 Northwind.dbml이라는 LINQ to SQL 파일은 NorthwindDataContext라는 DataContext 개체를 만듭니다.

단계별 지침이 포함된 예제는 방법: 데이터베이스 쿼리방법: 저장 프로시저 호출을 참조하세요.

LINQ를 지원하는 Visual Basic 기능

Visual Basic에는 LINQ의 사용을 간단하게 만들고 LINQ 쿼리를 수행하기 위해 작성해야 하는 코드의 양을 줄이는 뛰어난 기타 기능이 포함되어 있습니다. 여기에는 다음이 포함됩니다.

  • 무명 형식은 쿼리 결과에 따라 새 형식을 만들 수 있도록 합니다.

  • 암시적으로 형식화된 변수는 형식 지정을 지연시키고 컴파일러에서 쿼리 결과에 따라 형식을 유추할 수 있도록 합니다.

  • 확장 메서드는 형식 자체를 수정하지 않고 사용자 고유의 메서드를 사용하여 기존 형식을 확장할 수 있도록 합니다.

자세한 내용은 LINQ를 지원하는 Visual Basic 기능을 참조하세요.

지연된 쿼리 실행과 즉시 쿼리 실행

쿼리 실행은 쿼리를 만드는 것과 구분됩니다. 쿼리를 만든 후 쿼리 실행은 별도의 메커니즘으로 트리거됩니다. 쿼리를 정의한 후 곧바로 실행하거나(즉시 실행), 정의를 저장하고 나중에 쿼리를 실행할 수 있습니다(지연된 실행).

기본적으로 쿼리를 만들 때 쿼리 자체는 즉시 실행되지 않습니다. 대신 쿼리 정의가 쿼리 결과를 참조하는 데 사용되는 변수에 저장됩니다. 쿼리 결과 변수가 코드(예: For…Next 루프)에서 나중에 액세스될 때 쿼리가 실행됩니다. 이 프로세스를 지연된 실행이라고 합니다.

쿼리를 정의할 때 쿼리를 실행할 수도 있는데 이를 즉시 실행이라고 합니다. 쿼리 결과의 개별 요소에 액세스해야 하는 메서드를 적용하여 즉시 실행을 트리거할 수 있습니다. 이는 Count, Sum, Average, Min 또는 Max와 같은 집계 함수를 포함한 결과일 수 있습니다. 집계 함수에 대한 자세한 내용은 Aggregate 절을 참조하세요.

ToList 또는 ToArray 메서드를 사용하는 경우에도 즉시 실행이 시작됩니다. 이는 즉시 쿼리를 실행하고 결과를 캐시하려는 경우에 유용할 수 있습니다. 이러한 메서드에 대한 자세한 내용은 데이터 형식 변환을 참조하세요.

쿼리 실행에 대한 자세한 내용은 첫 번째 LINQ 쿼리 작성을 참조하세요.

Visual Basic의 XML

Visual Basic의 XML 기능에는 코드에서 XML을 쉽게 만들고 액세스하고 쿼리하고 수정하는 데 사용할 수 있는 XML 리터럴과 XML 축 속성이 포함되어 있습니다. XML 리터럴을 사용하면 코드에서 직접 XML을 작성할 수 있습니다. Visual Basic 컴파일러는 XML을 첫 번째 클래스 데이터 개체로 처리합니다.

다음 코드 예제에서는 XML 요소를 만들고 하위 요소와 특성에 액세스한 다음 LINQ를 사용하여 요소의 콘텐츠를 쿼리하는 방법을 보여 줍니다.

' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">

Module Sample1

    Sub SampleTransform()

        ' Create test by using a global XML namespace prefix.

        Dim contact =
            <ns:contact>
                <ns:name>Patrick Hines</ns:name>
                <ns:phone ns:type="home">206-555-0144</ns:phone>
                <ns:phone ns:type="work">425-555-0145</ns:phone>
            </ns:contact>

        Dim phoneTypes =
          <phoneTypes>
              <%= From phone In contact.<ns:phone>
                  Select <type><%= phone.@ns:type %></type>
              %>
          </phoneTypes>

        Console.WriteLine(phoneTypes)
    End Sub

End Module

자세한 내용은 XML을 참조하세요.

항목 설명
XML 쿼리될 수 있으며 Visual Basic 코드에서 XML을 첫 번째 클래스 데이터 개체로 포함할 수 있도록 하는 Visual Basic의 XML 기능에 대해 설명합니다.
쿼리 Visual Basic에서 사용할 수 있는 쿼리 절에 대한 참조 정보를 제공합니다.
LINQ(Language-Integrated Query) LINQ에 대한 일반 정보, 프로그래밍 지침 및 샘플을 포함하고 있습니다.
LINQ to SQL LINQ to SQL에 대한 일반 정보, 프로그래밍 지침 및 샘플을 포함하고 있습니다.
LINQ to Objects LINQ to Objects에 대한 일반 정보, 프로그래밍 지침 및 샘플을 포함하고 있습니다.
LINQ to ADO.NET(포털 페이지) LINQ to ADO.NET에 대한 일반 정보, 프로그래밍 지침, 샘플의 링크를 포함하고 있습니다.
LINQ to XML LINQ to XML에 대한 일반 정보, 프로그래밍 지침 및 샘플을 포함하고 있습니다.

방법 및 연습 항목

방법: 데이터베이스 쿼리

방법: 저장 프로시저 호출

방법: 데이터베이스의 데이터 수정

방법: 조인을 사용하여 데이터 결합

방법: 쿼리 결과 정렬

방법: 쿼리 결과 필터링

방법: 데이터 개수, 합 또는 평균 계산

방법: 쿼리 결과의 최소값 또는 최대값 찾기

방법: 저장 프로시저를 할당하여 업데이트, 삽입 및 삭제 수행(O/R 디자이너)

Visual Basic 2008 프로그래밍17장: LINQ

참고 항목