Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O SQL da entidade é uma linguagem funcional avançada. O bloco de construção do Entity SQL é uma expressão. Ao contrário do SQL convencional, o SQL da Entidade não se limita a um conjunto de resultados tabulares: o SQL de entidade dá suporte à composição de expressões complexas que podem ter literais, parâmetros ou expressões aninhadas. Um valor na expressão pode ser parametrizado ou composto por alguma outra expressão.
Expressões Aninhadas
Uma expressão aninhada pode ser colocada em qualquer lugar onde seja aceito um valor do tipo que ela retorna. Por exemplo:
-- 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}}};
Uma consulta aninhada pode ser colocadas em uma cláusula de projeção. Por exemplo:
-- 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
No Entity SQL, as consultas aninhadas devem estar sempre entre parênteses:
-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );
O exemplo a seguir demonstra como aninhar corretamente expressões no Entity SQL: How to: Order the Union of Two Queries.
Consultas aninhadas na projeção
Consultas aninhadas na cláusula de projeto podem obter convertido em consultas de produto cartesiano no servidor. Em alguns servidores de back-end, incluindo o SQL Server, isso pode fazer com que a tabela TempDB fique muito grande, o que pode afetar negativamente o desempenho do servidor.
Veja a seguir um exemplo dessa consulta:
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
Ordenando consultas aninhadas
No Entity Framework, uma expressão aninhada pode ser colocada em qualquer lugar na consulta. Como o Entity SQL permite grande flexibilidade na gravação de consultas, é possível escrever uma consulta que contenha uma ordenação de consultas aninhadas. No entanto, a ordem de uma consulta aninhada não é preservada.
-- 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