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>>。
备注
关系是 实体数据模型 (EDM) 中的一类构造。 可以在两个或更多实体类型之间建立关系,用户可以通过关系从一端(实体)导航到另一端。 当关系中的名称解析没有歧义时,from 和 to 为有条件可选。
NAVIGATE 在 O 和 C 空间中有效。
导航构造的常规形式如下:
navigate(instance-expresssion, 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/ref 类型。
示例
下面的 Entity SQL 查询使用 NAVIGATE 运算符来导航建立在 Address 和 SalesOrderHeader 实体类型之间的关系。 此查询基于 AdventureWorks 销售模型。 若要编译并运行此查询,请执行下列步骤:
将以下查询作为参数传递给
ExecuteStructuralTypeQuery
方法:
SELECT address.AddressID, (SELECT VALUE DEREF(soh)
FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
FROM AdventureWorksEntities.Addresses AS address