Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Entity SQL — это расширенный функциональный язык. Стандартный блок Entity SQL — это выражение. В отличие от обычного SQL, Entity SQL не ограничивается табличным результирующим набором: Entity SQL поддерживает составление сложных выражений, которые могут иметь литералы, параметры или вложенные выражения. Значение в выражении может быть параметризовано или состоит из другого выражения.
Вложенные выражения
Вложенное выражение можно поместить в любое место, где принимается значение возвращаемого типа. Рассмотрим пример.
-- Returns a hierarchical collection of three elements at top-level.
-- x must be passed in the parameter collection.
ROW(@x, {@x}, {@x, 4, 5}, {@x, 7, 8, 9})
-- Returns a hierarchical collection of one element at top-level.
-- x must be passed in the parameter collection.
{{{@x}}};
Вложенный запрос можно поместить в выражение проекции. Рассмотрим пример.
-- Returns a collection of rows where each row contains an Address entity.
-- and a collection of references to its corresponding SalesOrderHeader entities.
SELECT address, (SELECT DEREF(soh)
FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
AS salesOrderHeader FROM AdventureWorksEntities.Address AS address
В Entity SQL вложенные запросы всегда должны быть заключены в скобки:
-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );
В следующем примере показано, как правильно вложить выражения в Entity SQL: практическое руководство. Порядок объединения двух запросов.
Вложенные запросы в проекции
Вложенные запросы в разделе проектирования могут быть переведены в запросы декартова произведения на сервере. На некоторых внутренних серверах, включая SQL Server, это может привести к тому, что таблица TempDB будет очень большой, что может негативно повлиять на производительность сервера.
Ниже приведен пример такого запроса:
SELECT c, (SELECT c, (SELECT c FROM AdventureWorksModel.Vendor AS c ) As Inner2 FROM AdventureWorksModel.JobCandidate AS c ) As Inner1 FROM AdventureWorksModel.EmployeeDepartmentHistory AS c
Упорядочивание вложенных запросов
В Entity Framework вложенное выражение можно разместить в любом месте запроса. Так как Entity SQL обеспечивает большую гибкость при написании запросов, можно написать запрос, содержащий порядок вложенных запросов. Однако порядок вложенного запроса не сохраняется.
-- The following query will order the results by last name.
SELECT C1.FirstName, C1.LastName
FROM AdventureWorksModel.Contact as C1
ORDER BY C1.LastName
-- In the following query, ordering of the nested query is ignored.
SELECT C2.FirstName, C2.LastName
FROM (SELECT C1.FirstName, C1.LastName
FROM AdventureWorksModel.Contact as C1
ORDER BY C1.LastName) as C2