TREAT (Entity SQL)
特定の基本データ型のオブジェクトを指定の派生型のオブジェクトとして処理します。
構文
TREAT ( expression as type)
引数
expression
エンティティを返す任意の有効なクエリ式。
Note
指定の式の型は、特定のデータ型のサブタイプである必要があります。または、データ型は式の型のサブタイプである必要があります。
type
エンティティ型。 型は名前空間で修飾する必要があります。
Note
指定の式は、特定のデータ型のサブタイプである必要があります。または、データ型は式のサブタイプである必要があります。
戻り値
指定されたデータ型の値。
Remarks
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 演算子を使用して、Course 型のオブジェクトを OnsiteCourse 型のオブジェクトのコレクションに変換します。 このクエリは、 School モデルに基づいています。
SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses AS course
WHERE course IS OF( SchoolModel.OnsiteCourse)