Ú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 |
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: |
|
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. |
|
Nepovinné.Podmínka je vyhodnocena jako filtrování pro dotaz.Příklad: |
|
Nepovinné.Určuje pořadí řazení sloupců v dotazu.Příklad: |
|
Nepovinné.Spojuje dvě kolekce do jedné kolekce.Příklad:
|
|
Nepovinné.Skupiny prvků výsledek dotazu.Lze použít agregační funkce pro každou skupinu.Příklad: |
|
Nepovinné.Spojuje dvě kolekce do jedné hierarchické kolekce.Příklad:
|
|
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. |
|
Nepovinné.Vypočte hodnotu a přiřadí jej k nové proměnné v dotazu.Příklad: |
|
Nepovinné.Omezuje hodnoty aktuální iteraci proměnné k odstranění duplicitních hodnot ve výsledcích dotazu.Příklad: |
|
Nepovinné.Vynechá zadaný počet prvků v kolekci a poté vrátí zbývající prvky.Příklad: |
|
Nepovinné.Vynechá prvky v kolekci tak dlouho, dokud je zadaná podmínka true a vrátí zbývající prvky.Příklad: |
|
Nepovinné.Vrátí zadaný počet souvislých prvků od začátku kolekce.Příklad: |
|
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 |
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. |
|
Poskytuje referenční informace o klauzule dotazu, které jsou k dispozici v Visual Basic. |
|
Obsahuje obecné informace, programování pokyny a ukázky pro LINQ. |
|
Obsahuje obecné informace, programování pokyny a ukázky pro LINQ to SQL. |
|
Obsahuje obecné informace, programování pokyny a ukázky pro LINQ to Objects. |
|
Obsahuje odkazy na obecné informace, programování pokyny a ukázky pro LINQ to ADO.NET. |
|
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
Koncepty
Přehled LINQ XML v jazyce Visual Basic
DataContext Methods (O/R Designer)