Omówienie standardowych operatorów zapytań (Visual Basic)

Standardowe operatory zapytań to metody, które tworzą wzorzec LINQ. Większość z tych metod działa w sekwencjach, gdzie sekwencja jest obiektem, którego typ implementuje IEnumerable<T> interfejs lub IQueryable<T> interfejs. Standardowe operatory zapytań zapewniają możliwości zapytań, w tym filtrowanie, projekcję, agregację, sortowanie i nie tylko.

Istnieją dwa zestawy standardowych operatorów zapytań LINQ, jeden, który działa na obiektach typu, a drugi, który działa na obiektach typu IEnumerable<T>IQueryable<T>. Metody tworzące każdy zestaw są odpowiednio statycznych składowych Enumerable klas i Queryable . Są one definiowane jako metody rozszerzenia typu, na którym działają. Oznacza to, że mogą być wywoływane przy użyciu składni metody statycznej lub składni metody wystąpienia.

Ponadto kilka standardowych metod operatorów zapytań działa na typach innych niż oparte na IEnumerable<T> lub IQueryable<T>. Typ Enumerable definiuje dwie takie metody, które działają na obiektach typu IEnumerable. Te metody Cast<TResult>(IEnumerable) i OfType<TResult>(IEnumerable)umożliwiają włączenie nieparametryzowanej lub nieogółowej kolekcji do odpytowania we wzorcu LINQ. Robią to przez utworzenie silnie typizowanej kolekcji obiektów. Klasa Queryable definiuje dwie podobne metody i Cast<TResult>(IQueryable)OfType<TResult>(IQueryable), które działają na obiektach typu Queryable.

Standardowe operatory zapytań różnią się czasem wykonywania w zależności od tego, czy zwracają pojedynczą wartość, czy sekwencję wartości. Metody zwracające pojedynczą wartość (na przykład Average i Sum) są wykonywane natychmiast. Metody zwracające sekwencję odroczenia wykonywania zapytania i zwracają obiekt wyliczalny.

W przypadku metod, które działają w kolekcjach w pamięci, czyli tych metod, które rozszerzają IEnumerable<T>, zwracany obiekt wyliczalny przechwytuje argumenty przekazane do metody . Gdy ten obiekt zostanie wyliczony, zostanie zastosowana logika operatora zapytania, a wyniki zapytania zostaną zwrócone.

Natomiast metody rozszerzające IQueryable<T> nie implementują żadnego zachowania zapytań, ale tworzą drzewo wyrażeń reprezentujące zapytanie do wykonania. Przetwarzanie zapytań jest obsługiwane przez obiekt źródłowy IQueryable<T> .

Wywołania metod zapytań można połączyć w łańcuch w jednym zapytaniu, co umożliwia arbitralnie złożone zapytania.

Poniższy przykład kodu pokazuje, jak standardowe operatory zapytań mogą służyć do uzyskiwania informacji o sekwencji.

Dim sentence = "the quick brown fox jumps over the lazy dog"
' Split the string into individual words to create a collection.
Dim words = sentence.Split(" "c)

Dim query = From word In words
            Group word.ToUpper() By word.Length Into gr = Group
            Order By Length _
            Select Length, GroupedWords = gr

Dim output As New System.Text.StringBuilder
For Each obj In query
    output.AppendLine(String.Format("Words of length {0}:", obj.Length))
    For Each word As String In obj.GroupedWords
        output.AppendLine(word)
    Next
Next

'Display the output
MsgBox(output.ToString())

' This code example produces the following output:
'
' Words of length 3:
' THE
' FOX
' THE
' DOG
' Words of length 4:
' OVER
' LAZY
' Words of length 5:
' QUICK
' BROWN
' JUMPS

Składnia wyrażenia zapytania

Niektóre z najczęściej używanych standardowych operatorów zapytań mają dedykowaną składnię słów kluczowych języka C# i Visual Basic, która umożliwia ich wywoływanie w ramach wyrażenia zapytania. Aby uzyskać więcej informacji na temat standardowych operatorów zapytań, które mają dedykowane słowa kluczowe i odpowiadające im składnie, zobacz Składnia wyrażeń zapytań dla standardowych operatorów zapytań (Visual Basic).

Rozszerzanie standardowych operatorów zapytań

Zestaw standardowych operatorów zapytań można rozszerzyć, tworząc metody specyficzne dla domeny, które są odpowiednie dla domeny docelowej lub technologii. Możesz również zastąpić standardowe operatory zapytań własnymi implementacjami, które zapewniają dodatkowe usługi, takie jak ocena zdalna, tłumaczenie zapytań i optymalizacja. Zobacz AsEnumerable przykład.

Poniższe linki prowadzą do tematów, które zawierają dodatkowe informacje o różnych standardowych operatorach zapytań opartych na funkcjach.

Zobacz też