OFTYPE (Entity SQL)
Returns a collection of objects from a query expression that is of a specific type.
OFTYPE ( expression, [ONLY] test_type )
Arguments
- expression
Any valid query expression that returns a collection of objects.
- test_type
The type to test each object returned by expression against. The type must be qualified by a namespace.
Return Value
A collection of objects that are of type test_type, or a base type or derived type of test_type. If ONLY is specified, only instances of the test_type or an empty collection will be returned.
Remarks
An OFTYPE expression specifies a type expression that is issued to perform a type test against each element of a collection. The OFTYPE expression produces a new collection of the specified type containing only those elements that were either equivalent to that type or a sub-type of it.
An OFTYPE expression is an abbreviation of the following query expression:
select value treat(t as T) from ts as t where t is of (T)
Given that a Manager is a subtype of Employee, the following expression produces a collection of only managers from a collection of employees:
OfType(employees, NamespaceName.Manager)
It is also possible to up cast a collection using the type filter:
OfType(executives, NamespaceName.Manager)
Since all executives are managers, the resulting collection still contains all the original executives, though the collection is now typed as a collection of managers.
The following table shows the behavior of the OFTYPE operator over some patterns. All exceptions are thrown from the client side before the provider is invoked:
Pattern | Behavior |
---|---|
OFTYPE(Collection(EntityType), EntityType) |
Collection(EntityType) |
OFTYPE(Collection(ComplexType), ComplexType) |
Throws |
OFTYPE(Collection(RowType), RowType) |
Throws |
Example
The following Entity SQL query uses the OFTYPE operator to return a collection of Students from a collection of People. The query is based on the School Entity Data Model. For information about how to generate this model, see Generating the School Entity Data Model (Entity Framework Quickstart).
SELECT VALUE people FROM
OFTYPE(SchoolDataEntities.People, SchoolDataLib.Student) AS people
This example produces the following output:
4
5
6
7
10
11
12