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
Spusťte aplikaci Visual Studio.
V nabídce File (Soubor) přejděte na příkaz New (Nový) a klepněte na příkaz Project (Projekt).
V Nainstalované šablony klepněte na položku jazyka Visual Basic.
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ů.
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é 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ů
- Postupujte podle vzoru v getStudents způsob, jak přidat další instance Student třídy do seznamu.Přidání student se vám představí inicializátory objektů.Další informace naleznete v tématu Inicializátory objektů: pojmenované a anonymní typy (Visual Basic).
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
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
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
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
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.
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ů
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
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.
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
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
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
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
Umístěte ukazatel myši nad studentQuery3 v kódu k ověření, že přiřazený typ je IEnumerable(Of String).
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
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
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á:
Viz také
Úkoly
Návod: Zápis dotazů v C# (LINQ)
Koncepty
Odvození místního typu (Visual Basic)
Inicializátory objektů: pojmenované a anonymní typy (Visual Basic)
Představení technologie LINQ v jazyce Visual Basic
Další zdroje
LINQ (Language-Integrated Query)