Запросы в LINQ to Entities

Запрос представляет собой выражение, извлекающее данные из источника данных. Запросы обычно выражаются на специализированном языке запросов, например SQL для реляционных баз данных и XQuery для XML. Поэтому разработчикам приходится учить новый язык запросов для каждого типа источника данных и формата данных, для которых выполняется запрос. Интегрированный в язык запрос (LINQ) предлагает упрощенную согласованную модель работы с данными для различных типов источников данных и различных форматов данных. Запросы LINQ всегда работают с программируемыми объектами.

Операция запроса LINQ состоит из трех действий: получение одного или нескольких источников данных, создание запроса и его выполнение.

К источникам данных, реализующим общий интерфейс IEnumerable<T> или IQueryable<T>, можно выполнять запрос с помощью LINQ. Экземпляры универсального ObjectQuery<T> класса, реализующего универсальный IQueryable<T> интерфейс, служат источником данных для запросов LINQ to Entity. Универсальный класс ObjectQuery<T> представляет запрос, который возвращает коллекцию, включающую ноль или более типизированных объектов. Вы также можете разрешить компилятору определить тип сущности с помощью ключевое слово var C# (Dim в Visual Basic).

В запросе указываются данные, которые необходимо получить из источника данных. В запросе можно также указать, как следует сортировать, группировать и формировать возвращаемую информацию. В LINQ запрос хранится в переменной. Если запрос возвращает последовательность значений, то переменная запроса должна иметь тип данных, который может быть запрошен. Эта переменная запроса не выполняет никаких действий и не возвращает данные. Она только хранит информацию о запросе. После создания запроса его необходимо выполнить, чтобы получить данные.

Синтаксис запросов

Создание запросов LINQ to Entities может производиться с использованием синтаксиса выражений запросов или синтаксиса запросов на основе методов. Синтаксис выражения запроса является новым в C# 3.0 и Visual Basic 9.0, и состоит из набора предложений, написанных в декларативном синтаксисе, аналогичном Transact-SQL или XQuery. Однако среда CLR платформа .NET Framework не может считывать сам синтаксис выражения запроса. Таким образом, во время компиляции выражения запроса преобразуются в то, что понятно CLR - вызовы методов. Эти методы называются стандартными операторами запросов. Разработчик может вызывать их напрямую, используя синтаксис методов вместо синтаксиса запроса. Дополнительные сведения см. в разделе Синтаксис запросов и синтаксис методов в LINQ.

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

Выражения запроса используют декларативный синтаксис запроса. Этот синтаксис позволяет разработчикам писать запросы на высокоуровневом языке, по формату напоминающем Transact-SQL. С помощью синтаксиса выражения запроса можно выполнять даже сложную фильтрацию, упорядочение и группирование операций в источнике данных с помощью минимального программного кода. Дополнительные сведения см. в разделе "Базовые операции запросов" (Visual Basic). Примеры, показывающие применение синтаксиса выражения запросов, см. в следующих разделах.

Синтаксис запросов, основанных на методе

Другим способом создания запросов LINQ to Entity является использование запросов на основе методов. Синтаксис запроса на основе метода — это последовательность прямых вызовов методов оператора LINQ, передавая лямбда-выражения в качестве параметров. Дополнительные сведения см. в разделе Лямбда-выражения. Примеры, показывающие применение синтаксиса на основе методов, см. в следующих разделах.

См. также