OFTYPE (Entity SQL)

Возвращает коллекцию объектов из выражения запроса, которое относится к заданному типу.

Синтаксис

OFTYPE ( expression, [ONLY] test_type )

Аргументы

expression Любое допустимое выражение запроса, возвращающее коллекцию объектов.

test_type Тип для проверки каждого объекта, возвращаемого против expression . Для типа должно быть указано пространство имен.

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

Коллекция объектов, которые имеют тип test_type, базовый тип или тип, производный от test_type. Если задан параметр ONLY, возвращаются только экземпляры test_type или пустая коллекция.

Замечания

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

Выражение OFTYPE представляет собой сокращение следующего выражения запроса.

select value treat(t as T) from ts as t where t is of (T)

Например, если предположить, что тип Manager представляет собой подтип Employee, то следующее выражение позволяет извлечь из коллекции сотрудников данные только менеджеров:

OfType(employees, NamespaceName.Manager)

Можно также выполнить приведение коллекции с помощью фильтра типов:

OfType(executives, NamespaceName.Manager)

Все руководители являются менеджерами компании, поэтому полученная в результате коллекция по-прежнему содержит данные всех руководителей, несмотря на то что теперь по своему типу она рассматривается как коллекция менеджеров.

В следующей таблице показано поведение оператора OFTYPE по отношению к некоторым шаблонам. Все исключения активизируются на стороне клиента перед вызовом поставщика.

Расписание Поведение
OFTYPE(Collection(EntityType), EntityType) Collection(EntityType)
OFTYPE(Collection(ComplexType), ComplexType) Активизирует исключение
OFTYPE(Collection(RowType), RowType) Активизирует исключение

Пример

Следующий запрос Entity SQL использует оператор OFTYPE для возврата коллекции объектов OnsiteCourse из коллекции объектов Course. Запрос основан на модели School.

SELECT onsiteCourse.Location FROM 
    OFTYPE(SchoolEntities.Courses, SchoolModel.OnsiteCourse) 
    AS onsiteCourse

См. также