Představení technologie LINQ v jazyce Visual BasicIntroduction to LINQ in Visual Basic

LINQ (Language-Integrated Query) přidává funkce pro dotazy do Visual Basic a poskytuje jednoduché a výkonné funkce, když pracujete se všemi druhy dat.Language-Integrated Query (LINQ) adds query capabilities to Visual Basic and provides simple and powerful capabilities when you work with all kinds of data. Místo odeslání dotazu do databáze, která se má zpracovat, nebo práce s jinou syntaxí dotazu pro každý typ vyhledávaných dat, LINQ zavádí dotazy jako součást Visual Basicho jazyka.Rather than sending a query to a database to be processed, or working with different query syntax for each type of data that you are searching, LINQ introduces queries as part of the Visual Basic language. Používá sjednocenou syntaxi bez ohledu na typ dat.It uses a unified syntax regardless of the type of data.

LINQ umožňuje dotazovat se na data z databáze SQL Server, XML, polí v paměti a kolekcí, datových sad ADO.NET nebo jakýchkoli jiných vzdálených nebo místních zdrojů dat, které podporují technologii LINQ.LINQ enables you to query data from a SQL Server database, XML, in-memory arrays and collections, ADO.NET datasets, or any other remote or local data source that supports LINQ. To lze provést pomocí běžných Visual Basic prvků jazyka.You can do all this with common Visual Basic language elements. Vzhledem k tomu, že vaše dotazy jsou napsány v jazyce Visual Basic, jsou výsledky dotazu vráceny jako objekty silného typu.Because your queries are written in the Visual Basic language, your query results are returned as strongly-typed objects. Tyto objekty podporují technologii IntelliSense, která umožňuje psát kód rychleji a zachytit chyby v dotazech v době kompilace místo v době běhu.These objects support IntelliSense, which enables you to write code faster and catch errors in your queries at compile time instead of at run time. Dotazy LINQ lze použít jako zdroj dalších dotazů pro upřesnění výsledků.LINQ queries can be used as the source of additional queries to refine results. Mohou být také vázány na ovládací prvky, aby uživatelé mohli snadno zobrazit a upravit výsledky dotazu.They can also be bound to controls so that users can easily view and modify your query results.

Například následující příklad kódu ukazuje dotaz LINQ, který vrátí seznam zákazníků z kolekce a seskupí je na základě jejich umístění.For example, the following code example shows a LINQ query that returns a list of customers from a collection and groups them based on their location.

' 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

Spuštění příkladůRunning the examples

Chcete-li spustit příklady v úvodu a ve struktuře oddílu dotazu LINQ , zahrňte následující kód, který vrátí seznam zákazníků a objednávek.To run the examples in the introduction and in the Structure of a LINQ Query section, include the following code, which returns lists of customers and orders.

' 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

Zprostředkovatelé LINQLINQ providers

Zprostředkovatel LINQ mapuje vaše Visual Basic dotazy LINQ na zdroj dat, se kterým se dotazuje.A LINQ provider maps your Visual Basic LINQ queries to the data source being queried. Když napíšete dotaz LINQ, zprostředkovatel převezme dotaz a převede ho na příkazy, které bude zdroj dat moci spustit.When you write a LINQ query, the provider takes that query and translates it into commands that the data source will be able to execute. Zprostředkovatel také převede data ze zdroje na objekty, které tvoří výsledek dotazu.The provider also converts data from the source to the objects that make up your query result. Nakonec převede objekty na data při odeslání aktualizací do zdroje dat.Finally, it converts objects to data when you send updates to the data source.

Visual Basic obsahuje následující poskytovatele LINQ.Visual Basic includes the following LINQ providers.

PoskytovatelProvider PopisDescription
LINQ na objektyLINQ to Objects Poskytovatel LINQ to Objects umožňuje zadat dotaz na kolekce a pole v paměti.The LINQ to Objects provider enables you to query in-memory collections and arrays. Pokud objekt podporuje IEnumerable rozhraní nebo IEnumerable<T> , poskytovatel LINQ to Objects vám umožní dotazovat se na něj.If an object supports either the IEnumerable or IEnumerable<T> interface, the LINQ to Objects provider enables you to query it.

Poskytovatele LINQ to Objects můžete povolit importováním System.Linq oboru názvů, který je importován ve výchozím nastavení pro všechny projekty Visual Basic.You can enable the LINQ to Objects provider by importing the System.Linq namespace, which is imported by default for all Visual Basic projects.

Další informace o poskytovateli LINQ to Objects najdete v tématu LINQ to Objects.For more information about the LINQ to Objects provider, see LINQ to Objects.
Technologie LINQ to SQLLINQ to SQL Poskytovatel LINQ to SQL umožňuje zadávat dotazy a upravovat data v databázi SQL Server.The LINQ to SQL provider enables you to query and modify data in a SQL Server database. To usnadňuje mapování objektového modelu pro aplikaci na tabulky a objekty v databázi.This makes it easy to map the object model for an application to the tables and objects in a database.

Visual Basic usnadňuje práci s LINQ to SQL včetně Návrhář relací objektů (O/R Designer).Visual Basic makes it easier to work with LINQ to SQL by including the Object Relational Designer (O/R Designer). Tento Návrhář slouží k vytvoření objektového modelu v aplikaci, která je mapována na objekty v databázi.This designer is used to create an object model in an application that maps to objects in a database. Návrhář o/R také poskytuje funkce pro mapování uložených procedur a funkcí na DataContext objekt, který spravuje komunikaci s databází a ukládá stav pro optimistické kontroly souběžnosti.The O/R Designer also provides functionality to map stored procedures and functions to the DataContext object, which manages communication with the database and stores state for optimistic concurrency checks.

Další informace o poskytovateli LINQ to SQL najdete v tématu LINQ to SQL.For more information about the LINQ to SQL provider, see LINQ to SQL. Další informace o Návrhář relací objektů naleznete v tématu LINQ to SQL Tools v aplikaci Visual Studio.For more information about the Object Relational Designer, see LINQ to SQL Tools in Visual Studio.
Technologie LINQ to XMLLINQ to XML Poskytovatel LINQ to XML umožňuje zadávat dotazy a upravovat XML.The LINQ to XML provider enables you to query and modify XML. Můžete upravit XML v paměti nebo můžete načíst XML z a uložit XML do souboru.You can modify in-memory XML, or you can load XML from and save XML to a file.

Kromě toho poskytovatel LINQ to XML povoluje literály XML a vlastnosti OS XML, které umožňují psát XML přímo v kódu Visual Basic.Additionally, the LINQ to XML provider enables XML literals and XML axis properties that enable you to write XML directly in your Visual Basic code. Další informace najdete v tématu XML.For more information, see XML.
LINQ na DataSetLINQ to DataSet Poskytovatel LINQ to DataSet umožňuje dotazování a aktualizaci dat v datové sadě ADO.NET.The LINQ to DataSet provider enables you to query and update data in an ADO.NET dataset. Můžete přidat sílu technologie LINQ do aplikací, které používají datové sady, aby bylo možné zjednodušit a roztáhnout funkce pro dotazování, agregaci a aktualizaci dat v datové sadě.You can add the power of LINQ to applications that use datasets in order to simplify and extend your capabilities for querying, aggregating, and updating the data in your dataset.

Další informace najdete v tématu LINQ to DataSet.For more information, see LINQ to DataSet.

Struktura dotazu LINQStructure of a LINQ query

Dotaz LINQ, který se často označuje jako výraz dotazu, se skládá z kombinace klauzulí dotazu, které identifikují zdroje dat a proměnné iterace pro dotaz.A LINQ query, often referred to as a query expression, consists of a combination of query clauses that identify the data sources and iteration variables for the query. Výraz dotazu může také obsahovat pokyny pro řazení, filtrování, seskupování a spojování nebo výpočty, které se mají použít na zdrojová data.A query expression can also include instructions for sorting, filtering, grouping, and joining, or calculations to apply to the source data. Syntaxe výrazu dotazu se podobá syntaxi SQL; Proto se může stát, že se seznámíte se syntaxí.Query expression syntax resembles the syntax of SQL; therefore, you may find much of the syntax familiar.

Výraz dotazu začíná From klauzulí.A query expression starts with a From clause. Tato klauzule identifikuje zdrojová data pro dotaz a proměnné, které se používají k odkazování na jednotlivé prvky zdrojových dat.This clause identifies the source data for a query and the variables that are used to refer to each element of the source data individually. Tyto proměnné jsou pojmenované proměnné rozsahu nebo proměnné iterace.These variables are named range variables or iteration variables. Klauzule je vyžadována pro dotaz, Aggregate s výjimkou dotazů, kde From klauzule je volitelná. FromThe From clause is required for a query, except for Aggregate queries, where the From clause is optional. Po identifikaci oboru a zdroje dotazu v From klauzulích or Aggregate můžete zahrnout libovolnou kombinaci klauzulí dotazu pro upřesnění dotazu.After the scope and source of the query are identified in the From or Aggregate clauses, you can include any combination of query clauses to refine the query. Podrobnosti o klauzulích dotazu naleznete v tématu Visual Basic operátory dotazů LINQ dále v tomto tématu.For details about query clauses, see Visual Basic LINQ Query Operators later in this topic. Následující dotaz například identifikuje zdrojovou kolekci zákaznických dat jako customers proměnnou a proměnnou iterace s názvem. custFor example, the following query identifies a source collection of customer data as the customers variable, and an iteration variable named 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

Tento příklad je platný dotaz sám o sobě; Dotaz však bude mnohem výkonnější, pokud přidáte další klauzule dotazu pro upřesnění výsledku.This example is a valid query by itself; however, the query becomes far more powerful when you add more query clauses to refine the result. Můžete například přidat Where klauzuli pro filtrování výsledku podle jedné nebo více hodnot.For example, you can add a Where clause to filter the result by one or more values. Výrazy dotazů jsou jedním řádkem kódu; na konec dotazu můžete jednoduše připojit další klauzule dotazu.Query expressions are a single line of code; you can just append additional query clauses to the end of the query. Dotaz můžete rozdělit na více řádků textu, aby se zlepšila čitelnost pomocí znaku podtržítka (_) pro pokračování řádku.You can break up a query across multiple lines of text to improve readability by using the underscore (_) line-continuation character. Následující příklad kódu ukazuje příklad dotazu, který obsahuje Where klauzuli.The following code example shows an example of a query that includes a Where clause.

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

Další výkonnou klauzulí dotazu je Select klauzule, která umožňuje vracet pouze vybraná pole ze zdroje dat.Another powerful query clause is the Select clause, which enables you to return only selected fields from the data source. Dotazy LINQ vracejí vyčíslitelné kolekce objektů silně typovaného typu.LINQ queries return enumerable collections of strongly typed objects. Dotaz může vrátit kolekci anonymních typů nebo pojmenovaných typů.A query can return a collection of anonymous types or named types. Select Klauzuli můžete použít k vrácení pouze jednoho pole ze zdroje dat.You can use the Select clause to return only a single field from the data source. Pokud to provedete, typ vrácené kolekce je typ tohoto jediného pole.When you do this, the type of the collection returned is the type of that single field. Můžete také použít Select klauzuli pro vrácení více polí ze zdroje dat.You can also use the Select clause to return multiple fields from the data source. Pokud to provedete, typ vrácené kolekce je nový anonymní typ.When you do this, the type of the collection returned is a new anonymous type. Můžete také porovnat pole vrácená dotazem s poli zadaného pojmenovaného typu.You can also match the fields returned by the query to the fields of a specified named type. Následující příklad kódu ukazuje výraz dotazu, který vrací kolekci anonymních typů, které mají členy vyplněné daty z vybraných polí ze zdroje dat.The following code example shows a query expression that returns a collection of anonymous types that have members populated with data from the selected fields from the data source.

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

Dotazy LINQ lze také použít ke kombinování více zdrojů dat a vrácení jediného výsledku.LINQ queries can also be used to combine multiple sources of data and return a single result. To lze provést s jednou nebo více From klauzulemi nebo Join pomocí klauzulí dotazu nebo Group Join .This can be done with one or more From clauses, or by using the Join or Group Join query clauses. Následující příklad kódu ukazuje výraz dotazu, který kombinuje data o zákaznících a objednávkách a vrátí kolekci anonymních typů obsahujících data zákazníka a objednávky.The following code example shows a query expression that combines customer and order data and returns a collection of anonymous types containing customer and order data.

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.

Pomocí Group Join klauzule můžete vytvořit hierarchický výsledek dotazu, který obsahuje kolekci zákaznických objektů.You can use the Group Join clause to create a hierarchical query result that contains a collection of customer objects. Každý objekt zákazníka má vlastnost, která obsahuje kolekci všech objednávek pro daného zákazníka.Each customer object has a property that contains a collection of all orders for that customer. Následující příklad kódu ukazuje výraz dotazu, který kombinuje data o zákaznících a objednávkách jako hierarchický výsledek a vrátí kolekci anonymních typů.The following code example shows a query expression that combines customer and order data as a hierarchical result and returns a collection of anonymous types. Dotaz vrátí typ, který CustomerOrders obsahuje vlastnost, která obsahuje kolekci dat objednávky pro zákazníka.The query returns a type that includes a CustomerOrders property that contains a collection of order data for the customer. Obsahuje OrderTotal také vlastnost, která obsahuje součet součtů pro všechny objednávky daného zákazníka.It also includes an OrderTotal property that contains the sum of the totals for all the orders for that customer. (Tento dotaz je ekvivalentem levého VNĚJŠÍho spojení.)(This query is equivalent to a 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

Existuje několik dalších operátorů dotazů LINQ, pomocí kterých můžete vytvářet výkonné výrazy dotazů.There are several additional LINQ query operators that you can use to create powerful query expressions. Další část tohoto tématu popisuje různé klauzule dotazu, které můžete zahrnout do výrazu dotazu.The next section of this topic discusses the various query clauses that you can include in a query expression. Podrobnosti o Visual Basic klauzulích dotazů najdete v tématu dotazy.For details about Visual Basic query clauses, see Queries.

Visual Basic operátory dotazů LINQVisual Basic LINQ query operators

Třídy v System.Linq oboru názvů a další obory názvů, které podporují dotazy LINQ, obsahují metody, které lze volat pro vytváření a zpřesnění dotazů na základě potřeb vaší aplikace.The classes in the System.Linq namespace and the other namespaces that support LINQ queries include methods that you can call to create and refine queries based on the needs of your application. Visual Basic obsahuje klíčová slova pro následující klauzule běžných dotazů.Visual Basic includes keywords for the following common query clauses. Podrobnosti o Visual Basic klauzulích dotazů najdete v tématu dotazy.For details about Visual Basic query clauses, see Queries.

Klauzule FromFrom clause

Pro zahájení dotazu je vyžadována Aggregate klauzuleneboklauzule.From Either a From clause or an Aggregate clause is required to begin a query. From Klauzule Určuje zdrojovou kolekci a proměnnou iterace pro dotaz.A From clause specifies a source collection and an iteration variable for a query. Příklad:For example:

' 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 – klauzuleSelect clause

Volitelný parametr.Optional. Klauzule deklaruje sadu proměnných iterace pro dotaz. Select A Select clause declares a set of iteration variables for a query. Příklad:For example:

' 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

Není- Select li zadána klauzule, proměnné iterace pro dotaz se skládají z proměnných iterace určených From klauzulí or Aggregate .If a Select clause is not specified, the iteration variables for the query consist of the iteration variables specified by the From or Aggregate clause.

Klauzule WhereWhere clause

Volitelný parametr.Optional. Klauzule určuje podmínku filtrování pro dotaz. Where A Where clause specifies a filtering condition for a query. Příklad:For example:

' 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 – klauzule]Order By clause]

| Volitelné.|Optional. Klauzule určuje pořadí řazení pro sloupce v dotazu. Order By An Order By clause specifies the sort order for columns in a query. Příklad:For example:

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

Join – klauzuleJoin clause

Volitelný parametr.Optional. Klauzule kombinuje dvě kolekce do jedné kolekce. Join A Join clause combines two collections into a single collection. Příklad:For example:

' 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 – klauzuleGroup By clause

Volitelný parametr.Optional. Klauzule seskupí prvky výsledku dotazu. Group By A Group By clause groups the elements of a query result. Dá se použít k aplikování agregačních funkcí na každou skupinu.It can be used to apply aggregate functions to each group. Příklad:For example:

' 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 – klauzuleGroup Join clause

Volitelný parametr.Optional. Klauzule kombinuje dvě kolekce do jedné hierarchické kolekce. Group Join A Group Join clause combines two collections into a single hierarchical collection. Příklad:For example:

' 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 – klauzuleAggregate clause

Pro zahájení dotazu je vyžadována From klauzuleneboklauzule.Aggregate Either an Aggregate clause or a From clause is required to begin a query. Aggregate Klauzule aplikuje jednu nebo více agregačních funkcí na kolekci.An Aggregate clause applies one or more aggregate functions to a collection. Například můžete použít Aggregate klauzuli pro výpočet součtu všech prvků vrácených dotazem, jak je uvedeno v následujícím příkladu.For example, you can use the Aggregate clause to calculate a sum for all the elements returned by a query, as the following example does.

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

Můžete také použít Aggregate klauzuli pro úpravu dotazu.You can also use the Aggregate clause to modify a query. Například můžete použít Aggregate klauzuli k provedení výpočtu v související kolekci dotazů.For example, you can use the Aggregate clause to perform a calculation on a related query collection. Příklad:For example:

' 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 – klauzuleLet clause

Volitelný parametr.Optional. Klauzule vypočítá hodnotu a přiřadí ji k nové proměnné v dotazu. Let A Let clause computes a value and assigns it to a new variable in the query. Příklad:For example:

' 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 – klauzuleDistinct clause

Volitelný parametr.Optional. Distinct Klauzule omezuje hodnoty aktuální proměnné iterace tak, aby se vyloučily duplicitní hodnoty ve výsledcích dotazu.A Distinct clause restricts the values of the current iteration variable to eliminate duplicate values in query results. Příklad:For example:

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

Skip – klauzuleSkip clause

Volitelný parametr.Optional. Klauzule obchází zadaný počet prvků v kolekci a vrátí zbývající prvky. Skip A Skip clause bypasses a specified number of elements in a collection and then returns the remaining elements. Příklad:For example:

' 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 – klauzuleSkip While clause

Volitelný parametr.Optional. Klauzule obchází prvky v kolekci, pokud je true zadaná podmínka a vrátí zbývající prvky. Skip While A Skip While clause bypasses elements in a collection as long as a specified condition is true and then returns the remaining elements. Příklad:For example:

' 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 – klauzuleTake clause

Volitelný parametr.Optional. Klauzule vrátí zadaný počet souvislých prvků od začátku kolekce. Take A Take clause returns a specified number of contiguous elements from the start of a collection. Příklad:For example:

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

Take While – klauzuleTake While clause

Volitelný parametr.Optional. Klauzule obsahuje prvky v kolekci, pokud je zadaná podmínka a jsou true vynechány zbývající prvky. Take While A Take While clause includes elements in a collection as long as a specified condition is true and bypasses the remaining elements. Příklad:For example:

' 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)

Použití dalších funkcí dotazů LINQUse additional LINQ query features

Můžete použít další funkce dotazů LINQ voláním členů výčtových a Queryable typů poskytovaných LINQ.You can use additional LINQ query features by calling members of the enumerable and queryable types provided by LINQ. Tyto další funkce můžete použít voláním konkrétního operátoru dotazu na výsledek výrazu dotazu.You can use these additional capabilities by calling a particular query operator on the result of a query expression. Například následující příklad používá Enumerable.Union metodu ke kombinování výsledků dvou dotazů do jednoho výsledku dotazu.For example, the following example uses the Enumerable.Union method to combine the results of two queries into one query result. Používá Enumerable.ToList metodu k vrácení výsledku dotazu jako obecného seznamu.It uses the Enumerable.ToList method to return the query result as a generic list.

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

Podrobnosti o dalších možnostech LINQ najdete v tématu Přehled standardních operátorů dotazů.For details about additional LINQ capabilities, see Standard Query Operators Overview.

Připojení k databázi pomocí LINQ to SQLConnect to a database by using LINQ to SQL

V Visual Basic identifikujete SQL Server databázových objektů, jako jsou tabulky, zobrazení a uložené procedury, ke kterým chcete získat přístup pomocí souboru LINQ to SQL.In Visual Basic, you identify the SQL Server database objects, such as tables, views, and stored procedures, that you want to access by using a LINQ to SQL file. Soubor LINQ to SQL má příponu. dbml.A LINQ to SQL file has an extension of .dbml.

Pokud máte platné připojení k databázi SQL Server, můžete do projektu přidat šablonu položky LINQ to SQL třídy .When you have a valid connection to a SQL Server database, you can add a LINQ to SQL Classes item template to your project. Tím se zobrazí Návrhář relací objektů (Návrhář O/R).This will display the Object Relational Designer (O/R designer). Návrhář o/R umožňuje přetahovat položky, ke kterým chcete přistupovat, z okna Průzkumník serveru/Průzkumník databáze na plochu návrháře.The O/R Designer enables you to drag the items that you want to access in your code from the Server Explorer/Database Explorer onto the designer surface. LINQ to SQL soubor přidá DataContext objekt do projektu.The LINQ to SQL file adds a DataContext object to your project. Tento objekt obsahuje vlastnosti a kolekce pro tabulky a zobrazení, ke kterým chcete získat přístup, a metody pro uložené procedury, které chcete volat.This object includes properties and collections for the tables and views that you want access to, and methods for the stored procedures that you want to call. Po uložení změn do souboru LINQ to SQL (. dbml) máte přístup k těmto objektům ve vašem kódu odkazem na DataContext objekt, který je definován návrhářem relací O/R.After you have saved your changes to the LINQ to SQL (.dbml) file, you can access these objects in your code by referencing the DataContext object that is defined by the O/R Designer. DataContext Objekt pro projekt je pojmenován na základě názvu souboru LINQ to SQL.The DataContext object for your project is named based on the name of your LINQ to SQL file. Například LINQ to SQL soubor s názvem Northwind. dbml vytvoří DataContext objekt s názvem. NorthwindDataContextFor example, a LINQ to SQL file that is named Northwind.dbml will create a DataContext object named NorthwindDataContext.

Příklady s podrobnými pokyny naleznete v tématu How to: Dotaz na databázi a postupy: Zavolejte uloženou proceduru.For examples with step-by-step instructions, see How to: Query a Database and How to: Call a Stored Procedure.

Visual Basic funkce podporující technologii LINQVisual Basic features that support LINQ

Visual Basic zahrnuje další důležité funkce, které zjednodušují použití LINQ a snižují množství kódu, který musíte napsat k provádění dotazů LINQ.Visual Basic includes other notable features that make the use of LINQ simple and reduce the amount of code that you must write to perform LINQ queries. Patří mezi ně například:These include the following:

  • Anonymní typy, které umožňují vytvořit nový typ založený na výsledku dotazu.Anonymous types, which enable you to create a new type based on a query result.

  • Implicitně typované proměnné, které umožňují odložit určení typu a nechat kompilátor odvodit typ na základě výsledku dotazu.Implicitly typed variables, which enable you to defer specifying a type and let the compiler infer the type based on the query result.

  • Metody rozšíření, které umožňují rozšířit existující typ vlastními metodami, aniž by bylo potřeba měnit samotný typ.Extension methods, which enable you to extend an existing type with your own methods without modifying the type itself.

Podrobnosti najdete v tématu Visual Basic funkce, které podporují technologii LINQ.For details, see Visual Basic Features That Support LINQ.

Odložené a okamžité provedení dotazuDeferred and immediate query execution

Provádění dotazů je oddělené od vytvoření dotazu.Query execution is separate from creating a query. Po vytvoření dotazu se jeho spuštění aktivuje pomocí samostatného mechanismu.After a query is created, its execution is triggered by a separate mechanism. Dotaz může být proveden hned po definování (okamžité provedení), nebo může být definice uložena a dotaz může být proveden později (odložené spuštění).A query can be executed as soon as it is defined (immediate execution), or the definition can be stored and the query can be executed later (deferred execution).

Ve výchozím nastavení se při vytváření dotazu samotný dotaz nespustí okamžitě.By default, when you create a query, the query itself does not execute immediately. Místo toho je definice dotazu uložena v proměnné, která se používá k odkazování na výsledek dotazu.Instead, the query definition is stored in the variable that is used to reference the query result. Pokud je výsledkem proměnné výsledku dotazu později v kódu, například ve For…Next smyčce, je dotaz proveden.When the query result variable is accessed later in code, such as in a For…Next loop, the query is executed. Tento proces se označuje jako odložené provádění.This process is referred to as deferred execution.

Dotazy mohou být provedeny také při jejich definování, což se označuje jako okamžité provedení.Queries can also be executed when they are defined, which is referred to as immediate execution. Okamžité spuštění můžete aktivovat aplikováním metody, která vyžaduje přístup k jednotlivým prvkům výsledku dotazu.You can trigger immediate execution by applying a method that requires access to individual elements of the query result. Může to být výsledek zahrnutí agregační Countfunkce, jako například Average, Sum Min,, nebo Max.This can be the result of including an aggregate function, such as Count, Sum, Average, Min, or Max. Další informace o agregačních funkcích naleznete v tématu klauzule Aggregate.For more information about aggregate functions, see Aggregate Clause.

Použití metod ToArray nebo bude také vynutit okamžité provedení. ToListUsing the ToList or ToArray methods will also force immediate execution. To může být užitečné, když chcete spustit dotaz okamžitě a uložit výsledky do mezipaměti.This can be useful when you want to execute the query immediately and cache the results. Další informace o těchto metodách naleznete v tématu Převod datových typů.For more information about these methods, see Converting Data Types.

Další informace o provádění dotazů naleznete v tématu zápis prvního dotazu LINQ.For more information about query execution, see Writing Your First LINQ Query.

XML v jazyce Visual BasicXML in Visual Basic

Funkce XML v Visual Basic zahrnují literály XML a vlastnosti osy XML, které umožňují snadno vytvářet, přistupovat, dotazovat a upravovat XML ve vašem kódu.The XML features in Visual Basic include XML literals and XML axis properties, which enable you easily to create, access, query, and modify XML in your code. Literály XML umožňují psát XML přímo v kódu.XML literals enable you to write XML directly in your code. Kompilátor Visual Basic považuje XML za datový objekt první třídy.The Visual Basic compiler treats the XML as a first-class data object.

Následující příklad kódu ukazuje, jak vytvořit element XML, získat přístup k jeho dílčím elementům a atributům a zadat dotaz na obsah elementu pomocí LINQ.The following code example shows how to create an XML element, access its sub-elements and attributes, and query the contents of the element by using 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

Další informace najdete v tématu XML.For more information, see XML.

TémaTopic PopisDescription
XMLXML Popisuje funkce XML v Visual Basic, které lze dotazovat a které umožňují zahrnout XML jako datové objekty první třídy v kódu Visual Basic.Describes the XML features in Visual Basic that can be queried and that enable you to include XML as first-class data objects in your Visual Basic code.
DotazyQueries Poskytuje referenční informace o klauzulích dotazu, které jsou k dispozici v Visual Basic.Provides reference information about the query clauses that are available in Visual Basic.
LINQ (jazykově integrovaný dotaz)LINQ (Language-Integrated Query) Obsahuje obecné informace, pokyny pro programování a ukázky pro LINQ.Includes general information, programming guidance, and samples for LINQ.
LINQ to SQLLINQ to SQL Obsahuje obecné informace, pokyny pro programování a ukázky pro LINQ to SQL.Includes general information, programming guidance, and samples for LINQ to SQL.
LINQ to ObjectsLINQ to Objects Obsahuje obecné informace, pokyny pro programování a ukázky pro LINQ to Objects.Includes general information, programming guidance, and samples for LINQ to Objects.
LINQ to ADO.NET (stránka portálu)LINQ to ADO.NET (Portal Page) Obsahuje odkazy na Obecné informace, pokyny pro programování a ukázky pro LINQ to ADO.NET.Includes links to general information, programming guidance, and samples for LINQ to ADO.NET.
LINQ to XMLLINQ to XML Obsahuje obecné informace, pokyny pro programování a ukázky pro LINQ to XML.Includes general information, programming guidance, and samples for LINQ to XML.

Témata postupy a návodyHow to and walkthrough topics

Postupy: Dotazování databázeHow to: Query a Database

Postupy: Volání uložené proceduryHow to: Call a Stored Procedure

Postupy: Úprava dat v databáziHow to: Modify Data in a Database

Postupy: Kombinování dat pomocí spojeníHow to: Combine Data with Joins

Postupy: Seřadit výsledky dotazuHow to: Sort Query Results

Postupy: Filtrovat výsledky dotazuHow to: Filter Query Results

Postupy: Data o počtu, součtech nebo průměrechHow to: Count, Sum, or Average Data

Postupy: Hledání minimální nebo maximální hodnoty ve výsledku dotazuHow to: Find the Minimum or Maximum Value in a Query Result

Postupy: Přiřazení uložených procedur za účelem aktualizací, vkládání a odstraňování (Návrhář relací objektů)How to: Assign stored procedures to perform updates, inserts, and deletes (O/R Designer)

Kapitola 17: LINQ v programování Visual Basic 2008Chapter 17: LINQ in Programming Visual Basic 2008

Viz také:See also