Linq entity framework


Создание экземпляра ObjectQuery


Download 121.59 Kb.
bet2/4
Sana28.10.2023
Hajmi121.59 Kb.
#1730044
1   2   3   4
Bog'liq
linq entity framework

Создание экземпляра ObjectQuery


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

Составление запросов


Экземпляры универсального класса ObjectQuery, реализующего общий интерфейс IQueryable, служат источниками данных для запросов по технологии LINQ to Entities. В запросе точно указывается, какие данные надо получить из источника. В запросе можно также указать, как следует сортировать, группировать и формировать возвращаемую информацию. В LINQ запрос хранится в переменной. Эта переменная запроса не выполняет никаких действий и не возвращает данные. Она только хранит информацию о запросе. После создания запроса его необходимо выполнить, чтобы получить данные.
Создание запросов LINQ to Entities может производиться с использованием синтаксиса выражений запросов или синтаксиса запросов на основе методов. Синтаксические конструкции выражения запроса и запроса на основе методов впервые появились в версиях языков C# 3.0 и Visual Basic 9.0.
Дополнительные сведения см. в статье Запросы в LINQ to Entities.

Преобразование запросов


Для выполнения запроса в технологии LINQ to Entities на платформе Entity Framework запрос LINQ нужно преобразовать в дерево команд, которое можно выполнить на платформе Entity Framework.
LINQ to Entities запросы состоят из стандартных операторов запросов LINQ (напримерSelect, , Whereи GroupBy) и выражений (x > 10, Contact.LastName и т. д.). Операторы LINQ не определяются классом, а являются методами класса. В LINQ выражения могут содержать любые конструкции, допустимые для типов в пределах пространства имен System.Linq.Expressions, а по расширению - любые конструкции, которые могут быть представлены лямбда-функциями. Это надмножество выражений, допустимых для платформы Entity Framework, множество которых по определению ограничено допустимыми операциями над базой данных и поддерживается посредством ObjectQuery.
На платформе Entity Framework и операторы, и выражения представляются одной иерархией типов, которая затем помещается в дерево команд. Дерево команд используется платформой Entity Framework для выполнения запроса. Если запрос LINQ не удается выразить в виде дерева команд, при преобразовании запроса будет создано исключение. Преобразование запросов LINQ to Entities включает два промежуточных преобразования - стандартных операторов запросов и выражений.

Для ряда стандартных операторов запроса LINQ не существует допустимых эквивалентов в технологии LINQ to Entities. Попытки использования этих операторов приведут к возникновению исключения в процессе перевода запроса. Список поддерживаемых операторов LINQ to Entities см. в разделе Поддерживаемые и неподдерживаемые методы LINQ (LINQ to Entities).
Дополнительные сведения об использовании стандартных операторов запросов в LINQ to Entities см. в статье Стандартные операторы запросов в запросах LINQ to Entities.
Как правило, выражения технологии LINQ to Entities вычисляются на сервере, поэтому нельзя ожидать, что поведение выражений будет соответствовать семантике среды CLR. Дополнительные сведения см. в разделе Выражения в запросах LINQ to Entities.
Сведения о том, как вызовы методов CLR сопоставляются с каноническими функциями в источнике данных, см. в статье Сопоставление методов CLR с каноническими функциями.
Сведения о том, как вызывать канонические функции, функции базы данных и пользовательские функции из LINQ to Entities запросов, см. в статье Вызов функций в запросах LINQ to Entities.

Download 121.59 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling