Sdílet prostřednictvím


Základní operace dotazů (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:

Představení technologie LINQ v jazyce Visual Basic

Dotazy (Visual Basic)

Návod: Zápis dotazů ve 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 Vztahy typů v operacích dotazu (Visual Basic).

Další informace o použití From klauzule v jazyce Visual Basic naleznete v From – 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 Where – 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 By – 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 Select – 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 Postupy: 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 Group Join – klauzule (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 Postupy: 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 Group By – klauzule (Visual Basic).

Viz také

Referenční dokumentace

IEnumerable

Koncepty

Přehled standardních operátorů dotazu

Základní operace dotazů LINQ (C#)

Další zdroje

Začínáme s dotazy LINQ v jazyce Visual Basic

Dotazy (Visual Basic)

LINQ v jazyce Visual Basic