Поделиться через


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>>.

Замечания

Связи — это конструкции первого класса в модели данных сущностей (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 является клиентом и заказом являются relationshipto-end (клиент) и from-end (заказ) связи. Если OrderCustomer был связью n:1, результатом выражения навигации является Ref<Customer>.

Ниже приведена более простая форма этого выражения:

Select o.Id, navigate(o, OrderCustomer)
From LOB.Orders as o

Аналогичным образом в запросе следующей формы выражение навигации создаст порядок>> ссылок<коллекции<.

Select c.Id, navigate(c, OrderCustomer, Order, Customer)
From LOB.Customers as c

Выражение экземпляра должно быть типом сущности или ссылки.

Пример

Следующий запрос Entity SQL использует оператор NAVIGATE для перехода по связи между типами сущностей Address и SalesOrderHeader. Запрос основан на модели продаж AdventureWorks. Чтобы скомпилировать и запустить этот запрос, выполните следующие действия.

  1. Выполните процедуру, описанную в разделе "Практическое руководство. Выполнение запроса, возвращающего результаты структурного типа".

  2. Передайте следующий запрос в качестве аргумента в ExecuteStructuralTypeQuery метод:

SELECT address.AddressID, (SELECT VALUE DEREF(soh) 
FROM NAVIGATE(address, 
    AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) 
    AS soh)
FROM AdventureWorksEntities.Addresses AS address

См. также