Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Entity SQL es un lenguaje funcional enriquecido. El bloque de creación de Entity SQL es una expresión. A diferencia de SQL convencional, Entity SQL no se limita a un conjunto de resultados tabular: Entity SQL admite la redacción de expresiones complejas que pueden tener literales, parámetros o expresiones anidadas. Un valor de la expresión se puede parametrizar o componer de alguna otra expresión.
Expresiones anidadas
Se puede colocar una expresión anidada en cualquier lugar donde se acepte un valor del tipo que devuelve. Por ejemplo:
-- 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}}};
Una consulta anidada se puede colocar en una cláusula de proyección. Por ejemplo:
-- 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
En Entity SQL, las consultas anidadas siempre deben ir entre paréntesis:
-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );
En el ejemplo siguiente se muestra cómo anidar correctamente expresiones en Entity SQL : Cómo: Ordenar la unión de dos consultas.
Consultas anidadas en proyección
Las consultas anidadas en la cláusula del proyecto podrían traducirse a consultas de producto cartesianas en el servidor. En algunos servidores back-end, incluido SQL Server, esto puede hacer que la tabla TempDB obtenga un tamaño muy grande, lo que puede afectar negativamente al rendimiento del servidor.
A continuación se muestra un ejemplo de esta 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
Ordenar consultas anidadas
En Entity Framework, se puede colocar una expresión anidada en cualquier lugar de la consulta. Dado que Entity SQL permite una gran flexibilidad al escribir consultas, es posible escribir una consulta que contenga una ordenación de las consultas anidadas. Sin embargo, no se conserva el orden de una consulta anidada.
-- 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