Základní operace dotazu (Visual Basic)
Toto téma obsahuje stručný úvod do LINQ (Language-Integrated Query) výrazy v jazyce Visual Basic a některé typické druhy operací, které provedete v dotazu.Další informace naleznete v následujících tématech:
Úvod do jazyka Visual Basic LINQ
Názorný postup: Psaní dotazů v jazyce Visual Basic
Určení zdroje dat (z)
V LINQ dotazu, prvním krokem je určení zdroje dat, které mají být zobrazeny.Proto From klauzule dotazu vždy nastane dříve. Operátory dotazu vybrat a obrazce výsledek bude záviset na typu zdroje.
Dim query = From cust In customers
' ...
From Klauzule určuje zdroj dat customersa proměnné rozsahu, cust.Proměnné rozsahu je jako iterační proměnná smyčky, s tím rozdílem, že ve výrazu dotazu dojde k žádné skutečné iterace.Pokud dotaz je proveden, často For Each smyčky, proměnné rozsahu slouží jako odkaz na každý následující prvek v customers.Protože kompilátor může odvodit typ cust, není nutné explicitně zadat.Příklady dotazy napsané s a bez explicitního zápisu naleznete v tématu Typ relace v operací dotazu (Visual Basic).
Další informace o použití From klauzule v jazyce Visual Basic naleznete v Z klauzule (Visual Basic).
Filtrování dat (kde)
Nejběžnější operace dotazu je pravděpodobně použití filtru v podobě logický výraz.Dotaz vrátí pouze ty prvky, pro které výraz je pravdivý.A Where klauzule slouží k provádění filtrování.Filtr určuje prvky, které ve zdroji dat, které chcete zahrnout do výsledné pořadí.V následujícím příkladu jsou zahrnuty pouze zákazníci, kteří mají adresu v Londýně.
Dim londonCusts = From cust In customers
Where cust.City = "London"
' ...
Můžete použít logické operátory, jako je například And a Or ke kombinování výrazy filtru v Where klauzule.Například chcete-li vrátit pouze těch zákazníků, kteří jsou z Brna a jehož název je Devon, použijte následující kód:
Where cust.City = "London" And cust.Name = "Devon"
Vrácení zákazníci z Brna nebo Paříž, použijte následující kód:
Where cust.City = "London" Or cust.City = "Paris"
Další informace o použití Where klauzule v jazyce Visual Basic naleznete v Pokud klauzule (Visual Basic).
Řazení dat (Order)
Často je vhodné třídit vrácená data do určitého pořadí.Order By Klauzule způsobí prvků ve vrácené pořadí řazení v určeném poli nebo polích.Například následující dotaz seřadí výsledky, které jsou založeny Name vlastnost.Protože Name je řetězec, vrácená data budou seřazeny podle abecedy, od A do Z.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
V opačném pořadí řazení výsledků od Z do A, použít Order By...Descending klauzule.Výchozí hodnota je Ascending při ani Ascending ani Descending je určena.
Další informace o použití Order By klauzule v jazyce Visual Basic naleznete v ORDER klauzule (Visual Basic).
Výběr Data (výběr)
Select Klauzule určuje formu a obsah vrácené prvky.Například můžete určit, zda výsledky bude obsahovat úplný Customer objekty, pouze jeden Customer vlastnosti, dílčí sadu vlastností, kombinací vlastností z různých zdrojů dat nebo nějaký nový typ výsledku na základě výpočtu.Když Select klauzule vytváří něco jiného než kopii zdrojového prvku, operace se nazývá projekce.
Pro získání kolekce, která se skládá z úplné Customer objekty, vyberte rozsah proměnnou:
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Pokud Customer instance je velký objekt, který obsahuje velký počet polí, a vše, co chcete načíst název, můžete vybrat cust.Name, jak je znázorněno v následujícím příkladu.Odvození typu místní rozpozná toto změní typ výsledku z kolekce Customer objekty do kolekce řetězců.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
Chcete-li vybrat více polí ze zdroje dat, máte dvě možnosti:
V Select klauzule, zadejte pole, které chcete zahrnout do výsledků.Kompilátor bude definovat anonymní typ, který má tato pole jako jeho vlastnosti.Další informace naleznete v tématu Anonymní typy (Visual Basic).
Vrácené prvky v následujícím příkladu jsou výskyty anonymní typ, a proto nelze odkazovat na typ podle názvu jinde ve vašem kódu.Kompilátor určený název typu obsahuje znaky, které nejsou platné v normální kód jazyka Visual Basic.V následujícím příkladu prvků v kolekci, která je vrácena v dotazu v londonCusts4 jsou instancemi anonymní typ
Dim londonCusts4 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select Name = cust.Name, Phone = cust.Phone For Each londonCust In londonCusts4 Console.WriteLine(londonCust.Name & " " & londonCust.Phone) Next
-nebo-
Definovat pojmenovaný typ, který obsahuje konkrétní pole, která chcete zahrnout do výsledků a vytvoření a Inicializace instance typu Select klauzule.Tuto možnost použijte pouze v případě, že budete muset použít jednotlivé výsledky mimo kolekci, ve které jsou vráceny nebo je předat jako parametry ve volání metody.Typ londonCusts5 v následujícím příkladu je IEnumerable (Of NamePhone).
Public Class NamePhone Public Name As String Public Phone As String ' Additional class elements End Class
Dim londonCusts5 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select New NamePhone With {.Name = cust.Name, .Phone = cust.Phone}
Další informace o použití Select klauzule v jazyce Visual Basic naleznete v Vyberte klauzule (Visual Basic).
Spojování dat (spojení a spojení skupiny)
Můžete kombinovat více než jeden zdroj dat v From klauzule několika způsoby.Například následující kód používá dva zdroje dat a implicitně kombinuje vlastnosti z obou z nich ve výsledku.Dotaz vybere studentů, jejichž příjmení začínají znak samohlásky.
Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
Where student.Last.IndexOf(vowel) = 0
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
For Each vName In vowelNames
Console.WriteLine(vName.Initial & ": " & vName.Name)
Next
[!POZNÁMKA]
Spuštěním tohoto kódu se seznamem studentů, které jsou vytvořeny v Jak: vytvoření seznamu položek.
Join Klíčové slovo je ekvivalentní INNER JOIN v jazyce SQL.Tento nástroj je kombinací dvou kolekcích založených na odpovídající hodnoty klíčů mezi elementy ve dvou kolekcích.Dotaz vrátí všechny nebo část prvky kolekce, které mají odpovídající hodnoty klíče.Například následující kód vytvoří duplikát akce předchozí implicitní spojení.
Dim vowelNames2 = From student In students
Join vowel In vowels
On student.Last(0) Equals vowel
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
Group Joinkombinuje kolekce do jedné kolekce hierarchické, stejně jako LEFT JOIN v jazyce SQL.Další informace naleznete v tématu JOIN klauzule (Visual Basic) a Klauzule Join skupiny (Visual Basic).
Seskupování dat (Seskupit podle)
Můžete přidat Group By klauzule k seskupení prvků ve výsledku dotazu podle jednoho nebo více polí prvků.Například následující kód skupiny studentů ve třídě rok.
Dim studentsByYear = From student In students
Select student
Group By year = student.Year
Into Classes = Group
For Each yearGroup In studentsByYear
Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
For Each student In yearGroup.Classes
Console.WriteLine(" " & student.Last & ", " & student.First)
Next
Next
Pokud spustíte tento kód pomocí seznamu studentů, které jsou vytvořeny v Jak: vytvoření seznamu položek, výstup For Each příkaz je:
Rok: nižší
Tucker, Michael
Garcia, Hugo
Garcia, Debra
Tucker, zprávu
Rok: vyšších
Omelchenko, Svetlana
Novák, Michiko
Fakhouri, Fadi
Feng, Hanying
Janové a také, Terry
Rok: nejslabší
Mortensen, Sven
Garcia, Cesar
Varianta ukazuje následující kód objednávky let třídy a potom objednávky studenty v rámci každého roku podle příjmení.
Dim studentsByYear2 = From student In students
Select student
Order By student.Year, student.Last
Group By year = student.Year
Into Classes = Group
Pro více informací o Group By si prohlédněte Seskupit podle klauzule (Visual Basic).
Viz také
Referenční dokumentace
Koncepty
Přehled operátorů standardní dotaz
Základní operace LINQ dotazu (C#)