NAVIGATE (Entity SQL)
エンティティ間で確立されたリレーションシップをナビゲートします。
navigate(instance-expresssion, [relationship-type], [to-end [, from-end] ])
引数
- instance-expresssion
エンティティのインスタンス。
- relationship-type
概念スキーマ定義言語 (CSDL) ファイルで指定されたリレーションシップの種類の名前。 relationship-type は、<名前空間>.<リレーションシップの種類の名前> の形式で修飾されています。
- to
リレーションシップの終端エンティティ。
- from
リレーションシップの開始エンティティ。
戻り値
終端の基数が 1 の場合、戻り値は Ref<T> になります。 終端の基数が n の場合、戻り値は Collection<Ref<T>> になります。
解説
リレーションシップは、Entity Data Model (EDM) における最上位の構造です。 リレーションシップは、複数のエンティティ型の間で確立され、ユーザーはエンティティ間のリレーションシップをナビゲートできます。 from と to は、リレーションシップ内の名前解決があいまいでない場合の条件付きのオプションです。
NAVIGATE は、O および C 空間で有効です。
ナビゲーション構造の一般的な形式は次のようになります。
navigate(instance-expresssion, relationship-type, [ to-end [, from-end ] ] )
For example:
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 に基づいています。 このクエリをコンパイルして実行するには、次の手順を実行します。
Follow the procedure in StructuralType 結果を返すクエリの実行方法 (EntityClient).
Pass the following query as an argument to the
ExecuteStructuralTypeQuery
method:
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
FROM AdventureWorksEntities.Addresses AS address