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


TREAT (язык Entity SQL)

Обрабатывает объект некоторого базового типа, как объект указанного производного типа.

TREAT ( expression as type)

Аргументы

  • expression
    Любое допустимое выражение запроса, возвращающее сущность.

    NoteПримечание.

    Тип указанного выражения должен быть подтипом указанного типа данных, либо тип данных должен быть подтипом типа выражения.

  • type
    Тип сущности. Для типа должно быть указано пространство имен.

    NoteПримечание.

    Указанное выражение должно быть подтипом указанного типа данных, либо тип данных должен быть подтипом данного выражения.

Возвращаемое значение

Значение указанного типа данных.

Замечания

Оператор TREAT предназначен для приведения связанных классов к базовому типу. Например, если тип Employee является производным от типа Person, а «p» относится к типу Person, то выражение TREAT(p AS NamespaceName.Employee) приводит общий экземпляр типа Person к типу Employee. Иными словами, он позволяет обрабатывать «p» как тип Employee.

Оператор TREAT используется в сценариях наследования, в которых можно выполнить запрос наподобие следующего.

SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee) 

Этот запрос приводит сущности Person к типу Employee. Если значение «p» фактически не относится к типу Employee, то выражение имеет значение null.

NoteПримечание.

Указанное выражение Employee должно быть подтипом указанного типа данных Person, либо тип данных должен быть подтипом данного выражения. В противном случае это выражение вызовет ошибку во время компиляции.

Следующая таблица показывает, каким образом оператор TREAT работает с некоторыми стандартными и не очень часто используемыми конструкциями. Все исключения формируются на стороне клиента перед вызовом поставщика.

Конструкция Поведение

TREAT (null AS EntityType)

Возвращает DbNull.

TREAT (null AS ComplexType)

Формирует исключение.

TREAT (null AS RowType)

Формирует исключение.

TREAT (EntityType AS EntityType)

Возвращает EntityType или null.

TREAT (ComplexType AS ComplexType)

Формирует исключение.

TREAT (RowType AS RowType)

Формирует исключение.

Примеры

В следующем запросе Entity SQL оператор TREAT используется для преобразования объекта типа People в коллекцию объектов типа Student. Запрос основан на модели EDM «School». Дополнительные сведения о создании этой модели см. в разделе Создание модели EDM School (краткое руководство по платформе Entity Framework).

SELECT VALUE TREAT (people as SchoolDataLib.Student) 
    FROM SchoolDataEntities.People as people 
    WHERE people IS OF( SchoolDataLib.Student)

Этот пример выводит следующие данные.

Chow
Haas
Hamilton
Adams
Paschke
Abrus
Hance

См. также

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

Операторы работы с типами (язык Entity SQL)
Справочник по Entity SQL
Структурированные типы, допускающие значение NULL (язык Entity SQL)