Sdílet prostřednictvím


Návod: Zápis dotazů ve Visual Basic

Tento návod ukazuje použití funkcí jazyk Visual Basic k zapisování LINQ (Language-Integrated Query) dotazových výrazů.Návod ukazuje, jak vytvořit dotazy na seznam objektů Student, jak spustit dotazy a jak změnit jejich.Dotazy zahrnují několik funkcí, které jsou nové v aplikaci Visual Basic 2008 včetně inicializátory objektů, odvození typu místní a anonymní typy.

Po dokončení tohoto návodu budete připraveni přejít na vzorky a dokumentaci pro konkrétní LINQ zprostředkovatele, které vás zajímají.LINQproviders include Technologie LINQ to SQL, LINQ na DataSet, and Technologie LINQ to XML.

Vytvoření projektu

Vytvořte projekt konzolové aplikace

  1. Spusťte aplikaci Visual Studio.

  2. V nabídce File (Soubor) přejděte na příkaz New (Nový) a klepněte na příkaz Project (Projekt).

  3. V Nainstalované šablony klepněte na položku jazyka Visual Basic.

  4. V seznamu typy projektů, klepněte na Aplikace konzoly.V jméno zadejte název projektu a potom klepněte na tlačítko OK.

    Projekt je vytvořen.Ve výchozím nastavení obsahuje odkaz na System.Core.dll.Navíc importované obory názvů seznam na Stránka Odkazy, návrhář projektu (Visual Basic) zahrnuje System.Linq oboru názvů.

  5. Na Stránka Kompilovat, návrhář projektu (Visual Basic), aby Option infer je nastavena na na.

Přidat zdroj dat v paměti

Zdroj dat pro dotazy v tomto návodu je seznam Student objekty.Každý Student objekt obsahuje křestní jméno, příjmení, třída rok a akademické hodnosti v těle studenta.

Chcete-li přidat zdroj dat

  • Definovat Student třídou a vytvořit seznam instancí třídy.

    Důležitá poznámkaDůležité

    Kód potřebný k definování Student třídy a vytvořte seznam použitý v tomto návodu jsou příklady uvedené v Postupy: Vytvoření seznamu položek.Můžete zkopírovat je odsud a vložte jej do vašeho projektu.Nový kód nahradí kód, který se zobrazuje při vytvoření projektu.

Chcete-li přidat nový student seznam studentů

Vytvoření dotazu

Při spuštění dotazu přidány v této části vytváří seznam studentů, jejichž akademické hodnosti dostanou v deset nejlepších.Protože dotaz vybere kompletní Student objektu pokaždé, když typ výsledku dotazu je IEnumerable(Of Student).Však typ dotazu obvykle není podle definice dotazu.Namísto toho kompilátor používá odvození typu místní k určení typu.Další informace naleznete v tématu Odvození místního typu (Visual Basic).Proměnné rozsahu dotazu, currentStudent, slouží jako odkaz na každé Student instance ve zdroji, students, poskytuje přístup k vlastnosti každého objektu v students.

Chcete-li vytvořit jednoduchý dotaz

  1. Najít místo Main metoda projekt, který je označen takto:

    ' ****Paste query and query execution code from the walkthrough, 
    ' ****or any code of your own, here in Main.
    

    Následující kód zkopírujte a vložte jej do.

    Dim studentQuery = From currentStudent In students
                       Where currentStudent.Rank <= 10
                       Select currentStudent
    
  2. Umístěte ukazatel myši nad studentQuery ve vašem kódu, chcete-li ověřit, že kompilátor přiřazen typ je IEnumerable(Of Student).

Spuštění dotazu

Proměnná studentQuery obsahuje definici dotazu, nikoli výsledky spuštění dotazu.Je typický mechanismus pro spuštění dotazu For Each smyčky.Každý element vráceného postupně otevírá iterační proměnná smyčky.Další informace o spuštění dotazu naleznete v tématu Napište svůj první dotaz LINQ (Visual Basic).

Chcete-li spustit dotaz

  1. Přidejte následující For Each smyčka pod dotazu v projektu.

    For Each studentRecord In studentQuery
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Umístěte ukazatel myši nad řídicí proměnná smyčky for studentRecord zobrazíte jeho datového typu.Typ studentRecord odvodit za Student, protože studentQuery vrátí kolekci Student instance.

  3. Sestavte a spusťte aplikaci stisknutím kombinace kláves CTRL + F5.Poznámka: výsledky v okně konzoly.

Upravte dotaz

Je snadněji kontrolovat výsledky dotazu, pokud jsou v určeném pořadí.Můžete řadit vrácené sekvence založené na libovolné pole k dispozici.

Řazení výsledků

  1. Přidejte následující Order By klauzule mezi Where prohlášení a Select příkaz dotazu.Order By Klauzule bude řazení výsledků podle abecedy od A až Z, podle poslední název každého studenta.

    Order By currentStudent.Last Ascending 
    
  2. Chcete-li řadit podle příjmení a křestní jméno, přidejte obě pole dotazu:

    Order By currentStudent.Last Ascending, currentStudent.First Ascending 
    

    Můžete také určit Descending pořadí od Z k A.

  3. Sestavte a spusťte aplikaci stisknutím kombinace kláves CTRL + F5.Poznámka: výsledky v okně konzoly.

Chcete-li zavést místní identifikátor

  1. Přidejte kód v této části zavést místní identifikátor ve výrazu dotazu.Místní identifikátor budou konat průběžných výsledků.V následujícím příkladu name je identifikátor, který zastává zřetězení student jméno a příjmení.Místní identifikátor lze použít pro zvýšení pohodlí nebo jej můžete zvýšit výkon ukládáním výsledků výrazu, který by jinak počítá vícekrát.

    Dim studentQuery2 =
            From currentStudent In students
            Let name = currentStudent.Last & ", " & currentStudent.First
            Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10
            Order By name Ascending
            Select currentStudent
    
    ' If you see too many results, comment out the previous 
    ' For Each loop. 
    For Each studentRecord In studentQuery2
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Sestavte a spusťte aplikaci stisknutím kombinace kláves CTRL + F5.Poznámka: výsledky v okně konzoly.

Chcete-li projekt jedno pole v klauzuli Select

  1. Přidat dotaz a For Each smyčku z tohoto oddílu, vytvořte dotaz, který vytváří sekvenci, jejichž prvky se liší od prvků ve zdroji.V následujícím příkladu je zdrojové kolekce Student vrácené objekty, ale pouze jednoho člena každého objektu: křestního jména studentů, jejichž příjmení je Garcia.Protože currentStudent.First je řetězec datového typu sekvenci vrácenou studentQuery3 je IEnumerable(Of String), posloupnosti řetězců.Stejně jako v předchozích příkladech přiřazení datový typ pro studentQuery3 se nechá kompilátoru k určení, pomocí odvození typu místní.

    Dim studentQuery3 = From currentStudent In students
                        Where currentStudent.Last = "Garcia" 
                        Select currentStudent.First
    
    ' If you see too many results, comment out the previous 
    ' For Each loops. 
    For Each studentRecord In studentQuery3
        Console.WriteLine(studentRecord)
    Next
    
  2. Umístěte ukazatel myši nad studentQuery3 v kódu k ověření, že přiřazený typ je IEnumerable(Of String).

  3. Sestavte a spusťte aplikaci stisknutím kombinace kláves CTRL + F5.Poznámka: výsledky v okně konzoly.

Chcete-li vytvořit anonymní typ v klauzuli Select

  1. Přidání kódu v této části naleznete v tématu Jak anonymní typy se používají v dotazech.Při jejich použití v dotazech v případě, že chcete vrátit několik polí ze zdroje dat, spíše než celé záznamy (currentStudent záznamů v předchozích příkladech) jednoho pole nebo (First v předchozím oddílu).Namísto definování nové pojmenovaný typ, který obsahuje pole, které chcete zahrnout do výsledků, zadejte pole Select klauzule a kompilátor vytvoří anonymní typ s těmito poli jako jeho vlastnosti. Další informace naleznete v tématu Anonymní typy (Visual Basic).

    Následující příklad vytvoří dotaz, který vrátí název a pořadí seniors, jehož akademické pořadí je mezi 1 a 10 v pořadí akademické.V tomto příkladu, typ studentQuery4 musí být odvozen, protože Select klauzule vrátí instanci anonymní typ a anonymní typ nemá žádný použitelný název.

    Dim studentQuery4 =
            From currentStudent In students
            Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10
            Order By currentStudent.Rank Ascending
            Select currentStudent.First, currentStudent.Last, currentStudent.Rank
    
    ' If you see too many results, comment out the previous 
    ' For Each loops. 
    For Each studentRecord In studentQuery4
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First &
                          ":  " & studentRecord.Rank)
    Next
    
  2. Sestavte a spusťte aplikaci stisknutím kombinace kláves CTRL + F5.Poznámka: výsledky v okně konzoly.

Další příklady

Nyní, když jste se seznámili se základy, následuje seznam Další příklady znázorňující pružnost a výkon LINQ dotazy.Každý příklad předchází stručný popis, co dělá.Umístěte ukazatel myši nad proměnnou výsledek dotazu pro každý dotaz viz inferred typu. Použití For Each smyčka výsledky.

' Find all students who are seniors. 
Dim q1 = From currentStudent In students
         Where currentStudent.Year = "Senior" 
         Select currentStudent

' Write a For Each loop to execute the query. 
For Each q In q1
    Console.WriteLine(q.First & " " & q.Last)
Next 

' Find all students with a first name beginning with "C". 
Dim q2 = From currentStudent In students
         Where currentStudent.First.StartsWith("C")
         Select currentStudent

' Find all top ranked seniors (rank < 40). 
Dim q3 = From currentStudent In students
         Where currentStudent.Rank < 40 And currentStudent.Year = "Senior" 
         Select currentStudent

' Find all seniors with a lower rank than a student who  
' is not a senior. 
Dim q4 = From student1 In students, student2 In students
         Where student1.Year = "Senior" And student2.Year <> "Senior" And
               student1.Rank > student2.Rank
         Select student1
         Distinct

' Retrieve the full names of all students, sorted by last name. 
Dim q5 = From currentStudent In students
         Order By currentStudent.Last
         Select Name = currentStudent.First & " " & currentStudent.Last

' Determine how many students are ranked in the top 20. 
Dim q6 = Aggregate currentStudent In students
         Where currentStudent.Rank <= 20
         Into Count()

' Count the number of different last names in the group of students. 
Dim q7 = Aggregate currentStudent In students
         Select currentStudent.Last
         Distinct
         Into Count()

' Create a list box to show the last names of students. 
Dim lb As New System.Windows.Forms.ListBox
Dim q8 = From currentStudent In students
         Order By currentStudent.Last
         Select currentStudent.Last Distinct

For Each nextName As String In q8
    lb.Items.Add(nextName)
Next 

' Find every process that has a lowercase "h", "l", or "d" in its name. 
Dim letters() As String = {"h", "l", "d"}
Dim q9 = From proc In System.Diagnostics.Process.GetProcesses,
         letter In letters
         Where proc.ProcessName.Contains(letter)
         Select proc

For Each proc In q9
    Console.WriteLine(proc.ProcessName & ", " & proc.WorkingSet64)
Next

Další informace

Poté, co jste obeznámeni s základní principy práce s dotazy, jste připraveni přečíst dokumentaci a ukázky pro určitý typ LINQ zprostředkovatele, který vás zajímá:

LINQ na objekty

LINQ to SQL [LINQ to SQL]

LINQ to XML

LINQ to DataSet

Viz také

Úkoly

Návod: Zápis dotazů v C# (LINQ)

Koncepty

Doplňkové prostředky LINQ

Odvození místního typu (Visual Basic)

Inicializátory objektů: pojmenované a anonymní typy (Visual Basic)

Anonymní typy (Visual Basic)

Představení technologie LINQ v jazyce Visual Basic

Další zdroje

LINQ (Language-Integrated Query)

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

LINQ v jazyce Visual Basic

Dotazy (Visual Basic)