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


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

  1. Следуйте инструкциям в разделе Как выполнить запрос, возвращающий результаты типа StructuralType (EntityClient).

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

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

См. также

Справочник

NAVIGATE (язык Entity SQL)

Основные понятия

Справочник по Entity SQL