Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma obsahuje stručný úvod do výrazů Language-Integrated Query (LINQ) v jazyce Visual Basic a některých typických druhů operací, které v dotazu provedete. Další informace najdete v následujících tématech:
Úvod do LINQ v jazyce Visual Basic
Návod: Zápis dotazů v jazyce Visual Basic
Určení zdroje dat (od)
V dotazu LINQ je prvním krokem zadání zdroje dat, který chcete dotazovat. Proto klauzule From v dotazu vždy přichází jako první. Operátory dotazu vybírají a tvarují výsledek na základě typu zdroje.
Dim query = From cust In customers
' ...
Klauzule From určuje zdroj customersdat a proměnnoucust rozsahu . Proměnná rozsahu se podobá proměnné iterace smyčky s tím rozdílem, že ve výrazu dotazu nedojde k žádné skutečné iteraci. Při spuštění dotazu, často pomocí For Each smyčky, slouží proměnná rozsahu jako odkaz na každý po sobě jdoucí prvek v customers. Vzhledem k tomu, že kompilátor může odvodit typ cust, nemusíte ho explicitně zadávat. Příklady dotazů napsaných pomocí explicitního psaní a bez explicitního psaní najdete v tématu Relace typů v operacích dotazů (Visual Basic).
Další informace o použití From klauzule v jazyce Visual Basic naleznete v tématu From klauzule.
Filtrování dat (kde)
Pravděpodobně nejběžnější operací dotazu je použití filtru ve formě logického výrazu. Dotaz pak vrátí pouze ty prvky, pro které je výraz pravdivý. K filtrování se používá klauzule Where. Filtr určuje, které prvky ve zdroji dat se mají zahrnout do výsledné sekvence. V následujícím příkladu jsou zahrnuti 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 And a Or, k kombinování výrazů filtru v Where klausuli. Pokud například chcete vrátit jenom ty zákazníky, kteří jsou z Londýna a jejichž jméno je Devon, použijte následující kód:
Where cust.City = "London" And cust.Name = "Devon"
Pokud chcete vrátit zákazníky z Londýna nebo Paříže, 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 tématu Where Klauzule.
Řazení dat (Order By)
Často je vhodné řadit vrácená data do určitého pořadí. Klauzule Order By způsobí, že se prvky ve vrácené sekvenci seřadí podle zadaného pole nebo polí. Například následující dotaz seřadí výsledky podle Name vlastnosti. Protože Name je řetězec, vrácená data budou seřazena abecedně od A do Z.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
Pokud chcete výsledky uspořádat v opačném pořadí, od Z do A, použijte klauzuli Order By...Descending . Výchozí hodnota je Ascending , pokud Ascending není zadána ani Descending není zadána.
Další informace o použití Order By klausy v jazyce Visual Basic naleznete v části Klausa Order By.
Výběr dat (Select)
Klauzule Select určuje formulář a obsah vrácených prvků. Můžete například určit, jestli se výsledky budou skládat z úplných Customer objektů, pouze jedné Customer vlastnosti, podmnožina vlastností, kombinace vlastností z různých zdrojů dat nebo z nějakého nového typu výsledku na základě výpočtu.
Select Když klauzule vytvoří něco jiného než kopii zdrojového prvku, operace se nazývá projekce.
Pokud chcete načíst kolekci, která se skládá z úplných Customer objektů, vyberte samotnou proměnnou rozsahu:
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Customer Pokud je instance velký objekt, který obsahuje mnoho polí a vše, co chcete načíst, je název, můžete vybrat cust.Name, jak je znázorněno v následujícím příkladu. Odvození místního typu rozpozná, že se tím změní typ výsledku z kolekce Customer objektů na kolekci řetězců.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
Pokud chcete ze zdroje dat vybrat více polí, máte dvě možnosti:
SelectV klauzuli zadejte pole, která chcete zahrnout do výsledku. Kompilátor definuje anonymní typ, který má tato pole jako jeho vlastnosti. Další informace naleznete v tématu Anonymní typy.Vzhledem k tomu, že vrácené prvky v následujícím příkladu jsou instance anonymního typu, nelze odkazovat na typ podle názvu jinde v kódu. Název kompilátoru určený pro typ obsahuje znaky, které nejsou platné v normálním kódu jazyka Visual Basic. V následujícím příkladu jsou prvky v kolekci vrácené dotazem
londonCusts4instance anonymního typu.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) Nextnebo
Definujte pojmenovaný typ, který obsahuje konkrétní pole, jež chcete zahrnout do výsledku, a v klauzuli
Selectvytvořte a inicializujte instance tohoto typu. Tuto možnost použijte pouze v případě, že potřebujete použít jednotlivé výsledky mimo kolekci, ve které jsou vráceny, nebo pokud je musíte předat jako parametry ve volání metody. TyplondonCusts5v 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 ClassDim 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 tématu Select Clause.
Připojení k datům (propojení a skupinové spojení)
V klauzuli From můžete zkombinovat více než jeden zdroj dat několika způsoby. Následující kód například používá dva zdroje dat a implicitně kombinuje vlastnosti z obou z nich ve výsledku. Dotaz vybere studenty, jejichž příjmení začínají samohláskou.
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:
Tento kód můžete spustit se seznamem studentů vytvořených v části Postupy: Vytvoření seznamu položek.
Klíčové Join slovo je ekvivalentem jazyka INNER JOIN SQL. Kombinuje dvě kolekce na základě odpovídajících hodnot klíče mezi prvky v obou kolekcích. Dotaz vrátí všechny prvky kolekce nebo jeho část, které mají odpovídající hodnoty klíče. Následující kód například duplikuje akci předchozího implicitního 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 Join kombinuje kolekce do jedné hierarchické kolekce, stejně jako LEFT JOIN v SQL. Další informace naleznete v tématu klauzule Join a klauzule Group Join.
Seskupení dat (seskupování podle)
Můžete přidat Group By klauzuli, která seskupí prvky ve výsledku dotazu podle jednoho nebo více polí prvků. Například následující kód seskupuje studenty podle ročníku předmětu.
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 tento kód spustíte pomocí seznamu studentů vytvořeného v části Postupy: Vytvoření seznamu položek, výstup z tohoto příkazu For Each je:
Rok: Junior
Tucker, Michael
Garcia, Hugo
Garcia, Debra
Tucker, Lance
Rok: Senior
Omelchenko, Svetlana
Osada, Michiko
Fakhouri, Fadi
Feng, Hanying
Adams, Terry
Rok: První ročník
Mortensen, Sven
Garcia, Cesar
Varianta zobrazená v následujícím kódu seřadí ročníky, a pak seřadí studenty v rámci každého ročníku 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
Další informace o Group Byklauzuli Group By naleznete v tématu Klauzule Group By.