TREAT (Entity SQL)

特定の基本データ型のオブジェクトを指定の派生型のオブジェクトとして処理します。

構文

TREAT ( expression as type)

引数

expression エンティティを返す任意の有効なクエリ式。

Note

指定の式の型は、特定のデータ型のサブタイプである必要があります。または、データ型は式の型のサブタイプである必要があります。

type エンティティ型。 型は名前空間で修飾する必要があります。

Note

指定の式は、特定のデータ型のサブタイプである必要があります。または、データ型は式のサブタイプである必要があります。

戻り値

指定されたデータ型の値。

Remarks

TREAT は関連クラス間でキャストを実行するために使用します。 たとえば、 EmployeePerson から派生し、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 演算子を使用して、Course 型のオブジェクトを OnsiteCourse 型のオブジェクトのコレクションに変換します。 このクエリは、 School モデルに基づいています。

SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse) 
   FROM SchoolEntities.Courses AS course
   WHERE course IS OF( SchoolModel.OnsiteCourse)

関連項目