FUNCTION (Entity SQL)
Define una función en el ámbito de un comando de consulta de Entity SQL.
FUNCTION function-name
( [ { parameter_name <type_definition>
[ ,... n ]
]
) AS ( function_expression )
<type_definition>::=
{ data_type | COLLECTION ( <type_definition> )
| REF ( data_type )
| ROW ( row_expression )
}
Argumentos
- function-name
Nombre de la función.
- parameter-name
Nombre de un parámetro de la función.
- function_expression
Una expresión de Entity SQL válida que es la función. El comando de la función puede actuar sobre los parámetros parameter_name pasados a la función.
- data_type
Nombre de un tipo compatible.
- COLLECTION ( <type_definition*>* )
Una expresión que devuelve una colección de tipos, filas o referencias compatibles.
- REF ( data_type )
Una expresión que devuelve una referencia a un tipo de entidad.
- ROW ( row_expression )
Una expresión que devuelve registros anónimos y de tipo estructural a partir de uno o varios valores. Para obtener más información, vea ROW (Entity SQL).
Notas
Es posible declarar varias funciones inline con el mismo nombre, siempre que sus firmas sean distintas. Para obtener más información, vea Resolución de la sobrecarga de funciones (Entity SQL).
Solo se puede llamar a una función inline en un comando de Entity SQL si dicha función se ha definido en el comando. Sin embargo, es posible llamar a una función inline dentro de otra función inline antes o después de definir la función llamada. En el ejemplo siguiente, la función A llama a la función B antes de que esta se haya definido:
Function A() as ('A calls B. ' + B())
Function B() as ('B was called.')
A()
Para obtener más información, vea Cómo: Llamar a una función definida por el usuario (Entity Framework).
Las funciones también se pueden declarar en el modelo. Las funciones declaradas en el modelo se ejecutan de la misma manera que las funciones declaradas inline en el comando. Para obtener más información, vea Funciones definidas por el usuario (Entity SQL).
Ejemplo
El comando siguiente de Entity SQL define una función Products que toma un valor entero para filtrar los productos devueltos.
USING Microsoft.Samples.Entity;
FUNCTION Products(listPrice Int32) AS
(
SELECT VALUE p FROM AdventureWorksEntities.Products AS p WHERE p.ListPrice >= listPrice
)
select p from Products(@price) as p
El comando siguiente de Entity SQL define una función StringReturnsCollection que toma una colección de cadenas para filtrar los contactos devueltos.
USING Microsoft.Samples.Entity;
FUNCTION GetSpecificContacts(Ids Collection(Int32)) AS
(
SELECT VALUE id FROM Ids AS id WHERE id < @price
)
GetSpecificContacts(SELECT VALUE c.ContactID FROM AdventureWorksEntities.Contacts as c)