Sdílet prostřednictvím


Úvod do jazyka Visual Basic LINQ

Jazyk LINQ Language-Integrated Query () přidává možnosti dotaz na Visual Basic a poskytuje jednoduché a výkonné možnosti při práci s všeho druhu údajů.Místo odeslání dotazu do databáze, které mají být zpracovány nebo práce s jinou syntaxi pro každý typ dat, který hledáte, zavádí LINQ dotazy jako součást Visual Basic jazyk.Použije jednotný syntaxe bez ohledu na typ dat.

LINQ umožňuje zadat dotaz na data z databáze serveru SQL, XML, pole v paměti a kolekce, ADO.NET objektů DataSet nebo libovolná jiná data vzdáleného nebo místního zdroje, který podporuje LINQ.Můžete provést, to vše se společnými Visual Basic prvky jazyka.Protože vaše dotazy jsou zapsány Visual Basic jazyk, ve výsledcích dotazu jsou vráceny jako silně typové objekty.Tyto objekty podporují technologii IntelliSense, která umožňuje psát kód rychleji a zachycení chyb v dotazech v době kompilace místo v době běhu.LINQ dotazy lze použít jako zdroj dalších dotazů upřesnit výsledky.Mohou také být vázány na ovládací prvky tak, aby se uživatelé mohou snadno zobrazit a upravit ve výsledcích dotazu.

Například následující příklad kódu ukazuje LINQ dotazu, který vrátí seznam zákazníků z kolekce a skupiny, které je na základě jejich umístění.

' 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

V tomto tématu naleznete informace o následujících tématech:

  • Spuštění příkladů

  • Poskytovateli LINQ

  • Struktura dotazu LINQ

  • Operátory dotazů LINQ jazyka Visual Basic

  • Připojení k databázi pomocí LINQ to SQL

  • Funkce jazyka Visual Basic, které podporují LINQ

  • Odložené a okamžité spuštění dotazu

  • XML v jazyce Visual Basic

  • Související zdroje

  • Jak a návody

Spuštění příkladů

Pro spouštění příkladů v úvodu a v části "Struktura ze LINQ dotaz", patří následující kód, který vrátí seznam Zákazníci a objednávky.

' 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

Poskytovateli LINQ

A poskytovateli LINQ mapuje vaše Visual Basic LINQ dotazy na zdroj dat, který je dotazován.Při psaní dotazu LINQ zprostředkovatel má tento dotaz a převede jej do zdroje dat bude schopen spouštět příkazy.Poskytovatel také převod dat ze zdroje do objektů, které tvoří výsledek dotazu.Nakonec převede objekty na data při odeslání aktualizací do zdroje dat.

Visual Basiczahrnuje následující zprostředkovatelé LINQ.

Poskytovatel

Description

LINQ to Objects

LINQ to objekty poskytovatel umožňuje dotaz na kolekci v paměť a pole.V případě, že objekt podporuje buď IEnumerable nebo IEnumerable<T> rozhraní, objekty poskytovateli LINQ umožňuje zjistit.

LINQ to objekty zprostředkovatele můžete povolit pomocí importu System.Linq obor názvů, který je ve výchozím nastavení importovány všechny Visual Basic projektů.

Další informace o LINQ to zprostředkovatel objekty, viz LINQ to Objects.

LINQ to SQL

LINQ to SQL zprostředkovatel umožňuje dotazování a modifikaci dat v databázi serveru SQL Server.To usnadňuje mapovat objektový model aplikace k tabulkám a objekty v databázi.

Visual Basicusnadňuje práci s technologií LINQ to SQL, včetně Návrháře relací objektů (O/R Designer).Tento designer slouží k vytvoření objektu modelu v aplikaci, která mapuje na objekty v databázi. V Návrháři relací objektů také poskytuje funkce pro mapování uložené procedury a funkce DataContext objektu, který spravuje komunikaci s databází a ukládá stav pro optimistické řízení souběžnosti.

Další informace o LINQ to SQL zprostředkovatel, viz LINQ to SQL.Další informace o Návrháře relací objektů naleznete v tématu Object Relational Designer (O/R Designer).

LINQ to XML

LINQ to XML poskytovatel umožňuje dotazování a modifikaci XML.Můžete změnit v paměti XML nebo XML lze načíst z a uložení XML do souboru.

Navíc umožňuje LINQ to XML zprostředkovatel XML literály a vlastnosti osy XML, které umožňují psát přímo v XML do Visual Basic kód.Další informace naleznete v tématu XML v jazyce Visual Basic.

Komponenta LINQ to DataSet

LINQ to DataSet poskytovatel umožňuje vytvořit dotaz a aktualizovat data v ADO.NET objektu dataset.Přidáte-li napájení LINQ aplikace, které používají datové sady pro zjednodušení a rozšířit své možnosti pro vyhledávání, shromažďování a aktualizace dat do datové sady.

Další informace naleznete v tématu LINQ to DataSet.

Struktura dotazu LINQ

LINQ dotaz, označovaná také jako výrazu dotazu, je tvořen kombinací klauzule dotazu, které identifikují zdroje dat a iteraci proměnné pro dotaz.Výraz dotazu může také obsahovat pokyny pro řazení, filtrování, seskupování a spojování nebo výpočty pro zdrojová data.Syntaxe výrazu dotazu se podobá syntaxi SQL; Proto můžete najít mnoho syntaxe známých.

Výraz dotazu, který začíná From klauzule.Tato klauzule označuje zdrojová data pro dotaz a proměnných, které se používá k odkazování na každý prvek zdroje dat samostatně.Tyto proměnné jsou pojmenovány proměnné rozsahu nebo iteraci proměnné.From Klauzule je vyžadován pro dotaz, s výjimkou Aggregate dotazy, kde From je volitelná klauzule.Po oboru a zdroj dotazu jsou označeny v From nebo Aggregate doložky, mohou obsahovat libovolnou kombinaci klauzule dotazu k upřesnění dotazu.Chcete-li zobrazit podrobnosti o klauzule dotazu naleznete v tématu Visual Basic operátory dotazu LINQ dále v tomto tématu.Například následující dotaz určuje zdrojové kolekce zákaznických dat, jako customers proměnné a k iteraci proměnné s názvem 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

V tomto příkladu je platný dotaz sám; dotaz bude však mnohem výkonnější, když přidáte další klauzule dotazu pro upřesnění výsledků.Můžete například přidat Where klauzule filtrování výsledků podle jednoho nebo více hodnot.Dotaz výrazy jsou jediný řádek kódu; můžete pouze přidat klauzule dotazu další konec dotazu.Dotaz lze rozdělit přes více řádků textu, aby se zlepšila čitelnost pomocí znaku podtržítka (_) pokračování řádku.Následující příklad kódu ukazuje příklad dotazu, který zahrnuje Where klauzule.

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

Jinou klauzulí výkonné dotaz je Select klauzule, který umožňuje vrátit pouze vybrané pole z datového zdroje.LINQ dotazy vrací vyčíslitelné kolekce silně typové objekty.Dotaz vrátit kolekci typů anonymní nebo pojmenované.Můžete použít Select klauzule vrátit pouze jedno pole z datového zdroje.Pokud to uděláte, je typ kolekce vrácené typ jednoho pole.Můžete také použít Select klauzule vrátit více polí ze zdroje dat.Pokud to uděláte, typ kolekce vrácené je nový typ anonymní.Můžete také porovnat pole vrácené dotazem na pole zadaného pojmenovaného typu.Následující příklad kódu ukazuje výraz dotazu, který vrátí kolekci anonymní typy, které jsou členy naplněn daty z vybraných polí ze zdroje dat.

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

LINQ dotazy lze také kombinovat více zdrojů dat a vrátí jeden výsledek.To lze provést s jedním nebo více From doložky, nebo pomocí Join nebo Group Join klauzule dotazu.Následující příklad kódu ukazuje výraz dotazu, který kombinuje data odběratele a pořadí a vrací kolekci obsahující odběratele a pořadí datových typů anonymní.

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.

Můžete použít Group Join klauzule, chcete-li vytvořit hierarchický dotaz výsledek, který obsahuje kolekci objektů zákazníka.Každý zákazník objekt obsahuje vlastnost, která obsahuje kolekci všech objednávek tohoto zákazníka.Následující příklad kódu ukazuje výraz dotazu, který kombinuje data odběratele a pořadí jako hierarchický výsledek a vrátí kolekci typů anonymní.Dotaz vrátí typ, který obsahuje CustomerOrders vlastnost, která obsahuje kolekci dat objednávky zákazníka.Zahrnuje také OrderTotal vlastnost, která obsahuje součet součtů pro všechny objednávky pro tohoto zákazníka.(Tento dotaz je ekvivalentní klauzule 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 LINQ operátory dotazů, které můžete použít k vytvoření výkonné dotazových výrazů.V další části tohoto tématu popisuje různé klauzule dotazu, zahrnující ve výrazu dotazu.Další informace o Visual Basic klauzule dotazu naleznete v tématu Dotazy (Visual Basic).

Operátory dotazů LINQ jazyka Visual Basic

Třídy v System.Linq oboru názvů a jiných oborech názvů, které podporují LINQ dotazy zahrnují metody, které můžete volat za účelem vytvoření a doladění dotazů v závislosti na potřebách vaší aplikace.Visual Basicklíčová slova pro většinu běžných klauzule dotazu obsahuje, jak je popsáno v následující tabulce.

Termín

Definice

Z klauzule (Visual Basic)

Buď From klauzule nebo Aggregate klauzule je požadováno k zahájení dotazu.A From klauzule určuje zdrojové kolekce a iterační proměnná pro dotaz.Příklad:

Vyberte klauzule (Visual Basic)

Nepovinné.Deklaruje sadu iteraci proměnné pro dotaz.Příklad:

Pokud Select není zadána klauzule, iteraci proměnné dotazu jsou tvořeny iteraci proměnné určené From nebo Aggregate klauzule.

Pokud klauzule (Visual Basic)

Nepovinné.Podmínka je vyhodnocena jako filtrování pro dotaz.Příklad:

ORDER klauzule (Visual Basic)

Nepovinné.Určuje pořadí řazení sloupců v dotazu.Příklad:

JOIN klauzule (Visual Basic)

Nepovinné.Spojuje dvě kolekce do jedné kolekce.Příklad:

Seskupit podle klauzule (Visual Basic)

Nepovinné.Skupiny prvků výsledek dotazu.Lze použít agregační funkce pro každou skupinu.Příklad:

Klauzule Join skupiny (Visual Basic)

Nepovinné.Spojuje dvě kolekce do jedné hierarchické kolekce.Příklad:

Agregační klauzule (Visual Basic)

Buď From klauzule nebo Aggregate klauzule je požadováno k zahájení dotazu.Aggregate Klauzule platí jedna nebo více agregačních funkcí do kolekce.Například můžete použít Aggregate klauzule, chcete-li vypočítat součet všech prvků vrácených dotazem.

Můžete také použít Aggregate klauzule, chcete-li upravit dotaz.Například můžete použít Aggregate klauzule k provedení výpočtu v kolekci související dotaz.

Nechť klauzule (Visual Basic)

Nepovinné.Vypočte hodnotu a přiřadí jej k nové proměnné v dotazu.Příklad:

Klauzule DISTINCT (Visual Basic)

Nepovinné.Omezuje hodnoty aktuální iteraci proměnné k odstranění duplicitních hodnot ve výsledcích dotazu.Příklad:

Přeskočit klauzule (Visual Basic)

Nepovinné.Vynechá zadaný počet prvků v kolekci a poté vrátí zbývající prvky.Příklad:

Přeskočit při klauzule (Visual Basic)

Nepovinné.Vynechá prvky v kolekci tak dlouho, dokud je zadaná podmínka true a vrátí zbývající prvky.Příklad:

Přijmout klauzule (Visual Basic)

Nepovinné.Vrátí zadaný počet souvislých prvků od začátku kolekce.Příklad:

Přijmout při klauzule (Visual Basic)

Nepovinné.Tak dlouho, dokud je zadaná podmínka obsahuje prvky v kolekci true a vynechává zbývající prvky.Příklad:

Další informace o Visual Basic klauzule dotazu naleznete v tématu Dotazy (Visual Basic).

Můžete použít další funkce dotazu LINQ volající členy vyčíslitelné a dotazovatelný typy, které jsou k dispozici v LINQ.Tyto další funkce můžete použít voláním operátor konkrétní dotaz na výsledek výrazu dotazu.Například následující příklad kódu používá Union metoda kombinuje výsledky dvou dotazů do jednoho dotazu výsledek.Používá ToList<TSource> metoda vrátí výsledek dotazu jako obecný seznam.

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 naleznete v tématu Přehled operátorů standardní dotaz.

Připojení k databázi pomocí LINQ to SQL

V Visual Basic, identifikovat databázové objekty serveru SQL Server, jako jsou tabulky, zobrazení a uložených procedur, chcete-li získat přístup pomocí LINQ to SQL souboru.LINQ to SQL souboru s příponou dbml.

Pokud máte platné připojení k databázi serveru SQL Server, můžete přidat LINQ to SQL Classes šablonu položky do projektu.Zobrazí se Návrhář relací objektů (O/R designer).V Návrháři relací objektů umožňuje přetáhnout položky, které chcete získat přístup v kódu z Server Explorer/Průzkumník databáze na návrhové ploše.LINQ to SQL souboru přidá DataContext objekt do projektu.Tento objekt obsahuje vlastnosti a kolekce pro tabulky a zobrazení, které má přístup a metody pro uložené procedury, které chcete volat.Po uložení změny LINQ to SQL (dbml) souboru měli tyto objekty ve vašem kódu odkazováním DataContext objekt, který je definován v Návrháři relací objektů.DataContext Objektu pro projekt na základě názvu vaší LINQ to SQL souboru.Například vytvoří LINQ to SQL souboru s názvem Northwind.dbml DataContext objekt s názvem NorthwindDataContext.

Příklady s podrobnými pokyny naleznete v tématu Jak: dotaz do databáze pomocí LINQ (Visual Basic) a Jak: volání uložené procedury pomocí LINQ (Visual Basic).

Funkce jazyka Visual Basic, které podporují LINQ

Visual Basicobsahuje dalších důležitých funkcí, které provedou jednoduché použití LINQ a snížit objem kódu, který musíte napsat k provádění dotazů LINQ.Například:

  • Anonymní typy, které umožňují vytvoření nového typu, založeném na výsledku dotazu.

  • Implicitně zadané proměnné, které umožňují odložit, určení typu a ve kterých kompilátor odvození typu, na základě výsledku dotazu.

  • Rozšiřující metody, které umožňují rozšířit existující typ s vlastní metody, aniž byste měnili samotný datový typ.

Další informace naleznete v tématu Že podpora LINQ funkcí jazyka Visual Basic.

Odložené a okamžité spuštění dotazu

Provádění dotazu je oddělen od vytvoření dotazu.Po vytvoření dotazu je vyvolán samostatný mechanismus jeho spuštění.Dotaz mohou být provedeny co nejdříve, dokud je definován (okamžité provedení), nebo mohou být uloženy definice a dotazu mohou být provedeny později (odložené provedení).

Ve výchozím nastavení při vytváření dotazu, samotný dotaz není provedena okamžitě.Místo toho definice dotazu je uložena v proměnné, která se používá jako odkaz výsledek dotazu.Při přistupovat proměnné výsledek dotazu v kódu, jako například v For…Next smyčky, dotaz je spuštěn.Tento proces se nazývá odložené provedení.

Dotazy mohou být provedeny také v případě, že jsou definovány, která je označována jako okamžité provedení.Použitím metody, která vyžaduje přístup k jednotlivým prvkům výsledku dotazu mohou být příčinou okamžité provedení.To může být výsledek agregační funkci, jako je například včetně Count, Sum, Average, Min, nebo Max.Další informace o agregačních funkcích naleznete v tématu Agregační klauzule (Visual Basic).

Použití ToList nebo ToArray metody budou také vynutit okamžité spuštění.To může být užitečné, pokud chcete okamžitě spuštění dotazu a uložení výsledků do mezipaměti.Další informace o těchto metodách naleznete v tématu Převod datových typů.

Další informace o spuštění dotazu naleznete v tématu Psaní prvního LINQ dotazu (Visual Basic).

XML v jazyce Visual Basic

Funkce XML v Visual Basic XML literály a vlastnosti osy XML, které umožňují snadno vytvořit, přístup, dotazování a modifikaci XML ve vašem kódu.Literály XML umožňují psát přímo v kódu XML.Kompilátor jazyka Visual Basic považuje za objekt prvotřídní dat XML.

Následující příklad kódu ukazuje, jak vytvořit XML element, přístup k dispozici atributy a a pomocí LINQ dotaz na obsah elementu.

' 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 naleznete v tématu XML v jazyce Visual Basic.

Související zdroje

Téma

Description

XML v jazyce Visual Basic

Popisuje funkce XML v Visual Basic může být dotázána a které umožňují zahrnout XML jako prvotřídní datové objekty ve vaší Visual Basic kód.

Dotazy (Visual Basic)

Poskytuje referenční informace o klauzule dotazu, které jsou k dispozici v Visual Basic.

LINQ (integrován jazyk dotazu)

Obsahuje obecné informace, programování pokyny a ukázky pro LINQ.

LINQ to SQL

Obsahuje obecné informace, programování pokyny a ukázky pro LINQ to SQL.

LINQ to Objects

Obsahuje obecné informace, programování pokyny a ukázky pro LINQ to Objects.

LINQ objektů ADO.NET (stránka portálu)

Obsahuje odkazy na obecné informace, programování pokyny a ukázky pro LINQ to ADO.NET.

LINQ to XML

Obsahuje obecné informace, programování pokyny a ukázky pro LINQ to XML.

Jak a návody

Jak: dotaz do databáze pomocí LINQ (Visual Basic)

Jak: volání uložené procedury pomocí LINQ (Visual Basic)

Jak: změnit Data v databázi pomocí LINQ (Visual Basic)

Jak: sloučení dat s LINQ pomocí spojení (Visual Basic)

Jak: řazení výsledků dotazu pomocí LINQ (Visual Basic)

Jak: filtrovat výsledky dotazu pomocí LINQ (Visual Basic)

Jak: počet, součet nebo průměr dat pomocí LINQ (Visual Basic)

Jak: vyhledání minimální nebo maximální hodnotu ve výsledku dotazu pomocí LINQ (Visual Basic)

Walkthrough: Creating LINQ to SQL Classes (O/R Designer)

How to: Assign Stored Procedures to Perform Updates, Inserts, and Deletes (O/R Designer)

Hlavní kapitoly knihy

Chapter 17: LINQvProgramming Visual Basic 2008

Viz také

Úkoly

Vzorky LINQ

Koncepty

Přehled LINQ XML v jazyce Visual Basic

LINQ to DataSet Overview

DataContext Methods (O/R Designer)

Další zdroje

LINQ (integrován jazyk dotazu)

LINQ to SQL

Object Relational Designer (O/R Designer)