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            

См. также

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

Справочник по Entity SQL