Udostępnij za pośrednictwem


Pisanie pierwszej kwerendy LINQ (Visual Basic)

A kwerendy jest wyrażenie, które pobiera dane ze źródła danych.Kwerendy są wyrażone w języku kwerend dedykowanego.Z czasem różnych językach zostały opracowane dla różnych typów źródeł danych, na przykład SQL relacyjnych baz danych i XQuery XML.To sprawia, że niezbędne dla deweloperów aplikacji do uczenia się nowego języka kwerend dla każdego typu źródła danych lub format danych, który jest obsługiwany.

Language-Integrated Query (LINQ)upraszcza sytuacji poprzez oferowanie spójny model do pracy z danymi w różnego rodzaju źródeł danych i formaty.W LINQ kwerendy, zawsze pracy z obiektami.Użyj te same podstawowe schematy kodowania do wykonywania kwerend i przekształcania danych w dokumentach XML, baz danych SQL, zestawów danych ADO.NET i podmiotów, kolekcji.NET Framework i wszelkie inne źródło lub format, dla którego LINQ dostawca jest niedostępny.W tym dokumencie opisano w trzech fazach tworzenia i używania Basic LINQ kwerend.

łącze do wideo Aby uzyskać pokrewne wideo demonstracyjne, zobacz jak I: rozpocząć LINQ?.

Trzy etapy operacji kwerendy

LINQoperacji kwerendy składają się z trzech akcji:

  1. Uzyskać dane źródło lub źródła.

  2. Utwórz kwerendę.

  3. Wykonanie kwerendy.

W LINQ, wykonanie kwerendy różni się od utworzenia kwerendy.Nie pobierasz wszystkie dane tylko przez utworzenie kwerendy.Ten punkt jest omówione bardziej szczegółowo w dalszej części tego tematu.

Poniższy przykład ilustruje te trzy części operacji kwerendy.W przykładzie użyto liczb całkowitych jako Yródło danych wygodny dla celów demonstracyjnych.Jednakże te same pojęcia się również do innych źródeł danych.

[!UWAGA]

Na Skompiluj strony, Project Designer (Visual Basic), zapewnienia, że wywnioskować opcja jest ustawiona na na.

' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}

' Query creation.
Dim evensQuery = From num In numbers
                 Where num Mod 2 = 0
                 Select num

' Query execution.
For Each number In evensQuery
    Console.Write(number & " ")
Next

Dane wyjściowe:

0 2 4 6

Źródło danych

Ponieważ źródło danych w poprzednim przykładzie ma postać tablicy, niejawnie obsługuje on nazwę rodzajową IEnumerable<T> interfejsu.Jest to fakt, że pozwala na użycie tablicy jako źródło danych dla LINQ kwerendy.Typy obsługujące IEnumerable<T> lub interfejsu pochodnego, takie jak typowa IQueryable<T> są nazywane queryable typy.

Jako typ niejawnie queryable, tablica nie wymaga modyfikacji lub specjalnego traktowania sluzacych jako LINQ źródło danych.To samo dotyczy dla dowolnego typu kolekcji, która obsługuje IEnumerable<T>, w tym nazwę rodzajową List<T>, Dictionary<TKey, TValue>i innych klas w bibliotece klas.NET Framework.

Jeśli dane źródłowe nie implementuje już IEnumerable<T>, LINQ dostawca jest potrzebny do implementacji funkcji operatory standardowej kwerendy dla tego źródła danych.Na przykład LINQ to XML obsługuje pracy ładowania dokumentu XML do queryable XElement typ, jak pokazano w poniższym przykładzie.Aby uzyskać więcej informacji na temat operatorów standardowej kwerendy, zobacz Omówienie operatory kwerendy standardowe.

' Create a data source from an XML document.
Dim contacts = XElement.Load("c:\myContactList.xml")

Z LINQ to SQL, należy najpierw utworzyć Model obiektowo relacyjny mapowanie w czasie projektowania, ręcznie lub za pomocą Object Relational Designer (O/R Designer).Piszesz kwerend przeciwko obiektów i w czasie wykonywania LINQ to SQL obsługuje komunikację z bazą danych.W poniższym przykładzie customers reprezentuje określonej tabeli w bazie danych, a Table<TEntity> obsługuje generic IQueryable<T>.

' Create a data source from a SQL table.
Dim db As New DataContext("C:\Northwind\Northwnd.mdf")
Dim customers As Table(Of Customer) = db.GetTable(Of Customer)

Aby dowiedzieć się więcej na temat tworzenia określonych typów źródeł danych, zobacz dokumentację dla różnych LINQ dostawców.(Aby uzyskać listę tych dostawców, zobacz LINQ (zintegrowane języka kwerend).) Podstawowa zasada jest prosta: LINQ źródło danych jest dowolnym obiektem obsługującym nazwę rodzajową IEnumerable<T> interfejsu lub interfejs, który dziedziczy z niego.

[!UWAGA]

Typy takich jak ArrayList , który obsługuje niepodstawowego IEnumerable interfejs można również jako LINQ źródeł danych.Na przykład, która korzysta z ArrayList, zobacz Jak: kwerendy ArrayList LINQ.

Kwerenda

W kwerendzie należy określić jakie informacje zostaną pobrane ze źródła danych lub źródeł.Istnieje również możliwość określania, jak te informacje powinny być posortowane, pogrupowane lub strukturę, jeszcze przed wysłaniem.Aby włączyć tworzenie kwerendy, języka Visual Basic ma uwzględnić nowe elementy składni kwerendy języka.

Gdy jest wykonywana, w poniższym przykładzie zwraca wszystkie liczby parzyste z tablicy liczba całkowita, numbers.

' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}

' Query creation.
Dim evensQuery = From num In numbers
                 Where num Mod 2 = 0
                 Select num

' Query execution.
For Each number In evensQuery
    Console.Write(number & " ")
Next

Wyrażenie kwerendy zawiera trzy klauzule: From, Where, i Select.Określone funkcje i cel każdej klauzuli wyrażenie kwerendy zostały omówione w Podstawowe operacje kwerendy (Visual Basic).Aby uzyskać więcej informacji, zobacz Kwerendy (Visual Basic).Należy zauważyć, że w LINQ, definicji kwerendy często jest zapisywana pod zmienną i wykonane później.Kwerenda zmiennych, takich jak evensQuery w poprzednim przykładzie, musi być typu queryable. Typ evensQuery jest IEnumerable(Of Integer), przydzielonych przez kompilator, przy użyciu lokalnego wnioskowanie.

Warto pamiętać, że samej zmiennej kwerendy nie podejmuje żadnej akcji i zwraca żadnych danych.Przechowuje on tylko definicji kwerendy.W poprzednim przykładzie jest For Each pętli, która wykonuje kwerendę.

Wykonywanie kwerendy

Wykonanie kwerendy jest niezależna od utworzenie kwerendy.Tworzenie kwerendy definiuje kwerendy, ale wykonanie jest wyzwalany przez inny mechanizm.Kwerendy mogą być wykonywane tak szybko, jak to zdefiniowano (natychmiastowego wykonania), lub mogą być przechowywane definicji i kwerendy, które mogą być wykonywane później (wykonanie odroczonego).

Bb384667.collapse_all(pl-pl,VS.110).gifWykonanie odroczonego

Typowy LINQ kwerenda jest podobna do jednego w poprzednim przykładzie, w którym evensQuery jest zdefiniowany.Tworzy kwerendę, ale nie wykonuje on natychmiast.Zamiast tego, definicja kwerendy jest przechowywana w zmiennej kwerendy evensQuery.Wykonanie kwerendy później, zwykle za pomocą For Each pętla, która zwraca sekwencji wartości lub poprzez zastosowanie operatora standardowej kwerendy, takie jak Count lub Max.Ten proces jest określany jako wykonanie odroczonego.

' Query execution that results in a sequence of values.
For Each number In evensQuery
    Console.Write(number & " ")
Next

' Query execution that results in a single value.
Dim evens = evensQuery.Count()

Dla sekwencji wartości, dostęp pobrane dane przy użyciu zmiennej iteracji w For Each pętli (number w poprzednim przykładzie).Ponieważ zmienna kwerendy evensQuery, posiada definicji kwerendy, a nie wyniki kwerendy, można wykonać kwerendę, tak często, jak przy użyciu zmiennej zapytania więcej niż jeden raz.Na przykład może mieć bazy danych w aplikacji, który jest stale aktualizowany przez oddzielny wniosek.Po utworzeniu kwerendy, która pobiera dane z tej bazy danych, można użyć For Each w pętli do wykonywania kwerendy cyklicznie, pobieranie najnowszych danych za każdym razem.

W poniższym przykładzie zademonstrowano wykonywanie jak odroczonego działa.Po evensQuery2 jest zdefiniowana i wykonane z For Each w pętli, jak w poprzednich przykładach, niektóre elementy w źródle danych, numbers są zmieniane.Następnie For Each działa w pętli evensQuery2 ponownie.Wyniki są inne po raz drugi, ponieważ For Each pętli wykonuje kwerendę ponownie, przy użyciu nowej wartości w numbers.

Dim numberArray() = {0, 1, 2, 3, 4, 5, 6}

Dim evensQuery2 = From num In numberArray
                  Where num Mod 2 = 0
                  Select num

Console.WriteLine("Evens in original array:")
For Each number In evensQuery2
    Console.Write("  " & number)
Next
Console.WriteLine()

' Change a few array elements.
numberArray(1) = 10
numberArray(4) = 22
numberArray(6) = 8

' Run the same query again.
Console.WriteLine(vbCrLf & "Evens in changed array:")
For Each number In evensQuery2
    Console.Write("  " & number)
Next
Console.WriteLine()

Dane wyjściowe:

Evens in original array:

0 2 4 6

Evens in changed array:

0 10 2 22 8

Bb384667.collapse_all(pl-pl,VS.110).gifNatychmiastowego wykonania

Odroczonego wykonywaniu kwerend definicja kwerendy jest przechowywany w zmiennej zapytania do późniejszego uruchomienia.W natychmiastowego wykonania kwerenda jest wykonywana w czasie jego definicję.Wykonanie jest wyzwalane, gdy stosowana metoda, która wymaga dostępu do poszczególnych elementów wyniku kwerendy.Za pomocą jednego z operatorów standardowej kwerendy, które zwracają wartości pojedynczego zmuszony jest często natychmiastowego wykonania.Examples are Count, Max, Average, and First.Kwerenda jest wykonywana w tych operatorów standardowej kwerendy, tak szybko, jak są stosowane w celu obliczenia i zwraca wynik singleton.Aby uzyskać więcej informacji na temat operatorów standardowej kwerendy, które zwracają wartości pojedynczej, zobacz Operacje agregacji, Element operacji, i Kwantyfikator operacji.

Następująca kwerenda zwraca liczbę liczb parzystych w tablicy liczb całkowitych.Definicja kwerendy nie są zapisywane, a numEvens jest prostym Integer.

Dim numEvens = (From num In numbers
                Where num Mod 2 = 0
                Select num).Count()

Taki sam efekt można osiągnąć za pomocą Aggregate metoda.

Dim numEvensAgg = Aggregate num In numbers
                  Where num Mod 2 = 0
                  Select num
                  Into Count()

Można także wymusić wykonanie kwerendy, wywołując ToList lub ToArray metody na kwerendzie (natychmiastowa) lub zmiennej zapytania (wstrzymywane), jak pokazano w poniższym kodzie.

' Immediate execution.
Dim evensList = (From num In numbers
                 Where num Mod 2 = 0
                 Select num).ToList()

' Deferred execution.
Dim evensQuery3 = From num In numbers
                  Where num Mod 2 = 0
                  Select num
' . . .
Dim evensArray = evensQuery3.ToArray()

W poprzednich przykładach evensQuery3 jest kwerendą zmiennej, ale evensList znajduje się lista i evensArray jest tablicą.

Za pomocą ToList lub ToArray wymusić natychmiastowe wykonanie jest szczególnie przydatne w scenariuszach, w których chcesz kwerenda jest wykonywana natychmiast i buforuje wyników w obiekcie jedną kolekcję.Aby uzyskać więcej informacji na temat tych metod, zobacz Konwersja typów danych.

Może również powodować kwerendy mają być wykonane za pomocą IEnumerable metody, takie jak IEnumerable.GetEnumerator metoda.

Pokrewne pokazy wideo

Jak I: rozpocząć LINQ?

Jak wideo: Pisanie zapytań w języku Visual Basic

Zobacz też

Zadania

Próbki LINQ

Koncepcje

O/R Designer Overview

Wnioskowanie typu lokalnego (Visual Basic)

Omówienie operatory kwerendy standardowe

Wprowadzenie do LINQ w języku Visual Basic

Inne zasoby

Wprowadzenie do programu LINQ w języku Visual Basic

LINQ w języku Visual Basic

Kwerendy (Visual Basic)