Запросы в 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 to Entities)
Примеры синтаксиса для выражений запросов: упорядочение (язык LINQ to Entities)
Примеры синтаксиса для выражений запросов: агрегатные операторы (язык LINQ to Entities)
Примеры синтаксиса для выражений запросов: секционирование (язык LINQ to Entities)
Примеры синтаксиса выражений запросов: операторы соединения (язык LINQ to Entities)
Примеры синтаксиса выражений запросов: операторы работы с элементами (язык LINQ to Entities)
Примеры синтаксиса для выражений запросов: группирование (язык LINQ to Entities)
Примеры синтаксиса выражений запросов: навигация по связям (язык LINQ to Entities)
Синтаксис запросов, основанных на методе
Другим способом создания запросов LINQ to Entities является синтаксис запроса, основанного на методе. Он представляет собой последовательность непосредственных вызовов методов операторов LINQ, передающих лямбда-выражения в качестве параметров. Дополнительные сведения см. в разделе Lambda Expressions. Примеры, показывающие применение синтаксиса на основе методов, см. в следующих разделах.
Примеры синтаксиса запросов на основе методов: проекция (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: фильтрация (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: упорядочение (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: статистические операторы (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: секционирование (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: преобразование (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: операторы соединения (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: операторы работы с элементами (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: группирование (язык LINQ to Entities)
Примеры синтаксиса запросов на основе методов: навигация по связям (язык LINQ to Entities)
См. также
Основные понятия
Другие ресурсы
Getting Started with LINQ in C#
Getting Started with LINQ in Visual Basic