NAVIGATE (Entity SQL)
エンティティ間で確立されたリレーションシップをナビゲートします。
構文
navigate(instance-expression, [relationship-type], [to-end [, from-end] ])
引数
instance-expression
エンティティのインスタンス。
relationship-type
概念スキーマ定義言語 (CSDL) ファイルで指定されたリレーションシップの種類の名前。 relationship-type
は <名前空間>.<リレーションシップ種類名> として修飾されます。
to
リレーションシップの終端。
from
リレーションシップの開始。
戻り値
終端のカーディナリティが 1 の場合、戻り値は Ref<T>
になります。 終端のカーディナリティが n の場合、戻り値は Collection<Ref<T>>
になります。
Remarks
リレーションシップは、Entity Data Model (EDM) における最上位のコンストラクトです。 リレーションシップは、複数のエンティティ型の間で確立され、ユーザーはエンティティ間のリレーションシップをナビゲートできます。 from
と to
は、リレーションシップ内の名前解決があいまいでない場合の条件付きのオプションです。
NAVIGATE は、O および C 空間で有効です。
ナビゲーション構造の一般的な形式は次のようになります。
navigate(instance-expression
, relationship-type
, [ to-end
[, from-end
] ] )
次に例を示します。
Select o.Id, navigate(o, OrderCustomer, Customer, Order)
From LOB.Orders as o
ここで、OrderCustomer は relationship
であり、Customer と Order はリレーションシップの to-end
(顧客) と from-end
(注文) です。 OrderCustomer が n:1 リレーションシップの場合、ナビゲーション式の結果型は Ref<Customer> となります。
この式をより簡略化すると、次のようになります。
Select o.Id, navigate(o, OrderCustomer)
From LOB.Orders as o
同様に、次の形式のクエリでは、ナビゲーション式は Collection<Ref<Order>> のようになります。
Select c.Id, navigate(c, OrderCustomer, Order, Customer)
From LOB.Customers as c
インスタンス式は、エンティティ/参照型になる必要があります。
例
次の Entity SQL クエリでは、NAVIGATE 演算子を使用して、Address エンティティ型と SalesOrderHeader エンティティ型間で確立されたリレーションシップをナビゲートします。 このクエリは、AdventureWorks Sales Model に基づいています。 このクエリをコンパイルして実行するには、次の手順を実行します。
「方法: StructuralType 結果を返すクエリを実行する」の手順に従います。
次のクエリを引数として
ExecuteStructuralTypeQuery
メソッドに渡します。
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address,
AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID)
AS soh)
FROM AdventureWorksEntities.Addresses AS address