Запросы в LINQ to Entities

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

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

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

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

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

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

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

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

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

Другим способом создания запросов LINQ to Entities является синтаксис запроса, основанного на методе. Он представляет собой последовательность непосредственных вызовов методов операторов LINQ, передающих лямбда-выражения в качестве параметров. Дополнительные сведения см. в разделе Lambda Expressions. Примеры, показывающие применение синтаксиса на основе методов, см. в следующих разделах.

См. также

Основные понятия

LINQ to Entities

Другие ресурсы

Getting Started with LINQ in C#
Getting Started with LINQ in Visual Basic