Поделиться через


Общие сведения о стандартных операторах запроса (Visual Basic)

Стандартные операторы запросов — это методы, формирующие шаблон LINQ. Большинство этих методов работают с последовательностями. В данном контексте последовательность — это объект, тип которого реализует интерфейс IEnumerable<T> или IQueryable<T>. Функциональные возможности стандартных операторов запросов включают фильтрацию, проекцию, статистическую обработку, сортировку и многие другие.

Существует два набора стандартных операторов запросов LINQ, один из них работает с объектами типа IEnumerable<T>, а другой — с объектами типа IQueryable<T>. Методы, входящие в каждый из наборов, являются статическими членами классов Enumerable и Queryable соответственно. Они определяются как методы расширения типа, к которому применяются. Это означает, что их можно вызывать, используя либо синтаксис статического метода, либо синтаксис метода экземпляра.

Кроме того, несколько стандартных методов операторов запроса работают с типами, отличными от основанных на IEnumerable<T> или IQueryable<T>. Тип Enumerable определяет два таких метода, которые работают с объектами типа IEnumerable. Эти методы (Cast<TResult>(IEnumerable) и OfType<TResult>(IEnumerable)) позволяют выполнять запрос к непараметризованным или не являющимся универсальными коллекциям с использованием шаблона LINQ. Для этого создается строго типизированная коллекция объектов. Класс Queryable определяет два схожих метода (Cast<TResult>(IQueryable) и OfType<TResult>(IQueryable)), которые работают с объектами типа Queryable.

Стандартные операторы запросов имеют различное время выполнения, которое зависит от того, возвращают они одноэлементное значение или последовательность значений. Методы, возвращающие одноэлементное значение (например, Average и Sum), выполняются одновременно. Методы, которые возвращают последовательность, откладывают выполнение запроса и возвращают перечисляемый объект.

При использовании методов, которые применяются к коллекциям, т. е. методов, которые расширяют IEnumerable<T>, возвращаемый перечисляемый объект захватывает переданные в этот метод аргументы. При перечислении этого объекта задействуется логика оператора запросов и возвращаются результаты запросов.

При этом методы, расширяющие IQueryable<T>, не реализуют поведение запросов, но формируют дерево выражения, представляющее выполняемый запрос. Запрос обрабатывается объектом IQueryable<T> источника.

Вызовы методов запросов можно объединять в один запрос, в результате чего запросы могут становиться довольно сложными.

В следующем примере кода показано, как использовать стандартные операторы запросов для получения сведений о последовательности.

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

Синтаксис выражений запросов

Некоторые из наиболее часто используемых стандартных операторов запросов имеют представление в виде ключевых слов в синтаксисе языка C# и Visual Basic, что позволяет вызывать их как часть выражения запроса. Дополнительные сведения о стандартных операторах запросов, имеющих выделенные ключевые слова и соответствующие синтаксисы, см. в разделе "Синтаксис выражения запросов" для стандартных операторов запросов (Visual Basic).

Расширение стандартных операторов запросов

Набор стандартных операторов запросов можно дополнить, создав специальные методы, соответствующие вашему целевому домену или технологии. Кроме того, можно заменить стандартные операторы запросов на собственные реализации, предоставляющие дополнительные услуги, такие как удаленное вычисление, перевод запросов и оптимизация. Пример см. в разделе AsEnumerable.

Следующие ссылки адресуют к разделам, содержащим дополнительные сведения о различных стандартных операторах запросов в зависимости от их функциональности.

См. также