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


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 является значением параметра relationship, а Customer и Order являются элементами связи to-end (customer) и from-end (order). Если 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 Sales. Для компиляции и запуска этого запроса выполните следующие шаги.

  1. Выполните процедуру из статьи How to: Execute a Query that Returns StructuralType Results.

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

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

См. также