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


Запросы в LINQ to Entities

Запрос — это выражение, которое извлекает данные из источника данных. Запросы обычно выражаются на специализированном языке запросов, например SQL для реляционных баз данных и XQuery для XML. Поэтому разработчикам пришлось узнать новый язык запросов для каждого типа источника данных или формата данных, который они запрашивают. Language-Integrated Query (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 Entity можно создавать в двух разных синтаксисах: синтаксис выражения запроса и синтаксис запросов на основе метода. Синтаксис выражения запроса является новым в C# 3.0 и Visual Basic 9.0, и он состоит из набора предложений, написанных в декларативном синтаксисе, аналогичном Transact-SQL или XQuery. Однако среда выполнения общего языка CLR в .NET Framework не может считывать сам синтаксис выражения запроса. Поэтому во время компиляции выражения запросов претворяются в то, что среда CLR понимает: вызовы методов. Эти методы называются стандартными операторами запросов. В качестве разработчика вы можете вызывать их непосредственно с помощью синтаксиса метода, а не с помощью синтаксиса запросов. Дополнительные сведения см. в разделе Синтаксис запросов и синтаксис метода в LINQ.

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

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

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

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

См. также