FUNCTION (Entity SQL)
Définit une fonction dans la portée d'une commande de requête 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 )
}
Arguments
- function-name
Nom de la fonction.
- parameter-name
Nom d'un paramètre dans la fonction.
- function_expression
Expression Entity SQL valide qui correspond à la fonction. La commande dans la fonction peut agir sur les paramètres parameter_name transmis à la fonction.
- data_type
Nom d'un type pris en charge.
- COLLECTION ( <type_definition> )
Expression qui retourne une collection de types, lignes ou références pris en charge.
- REF ( data_type )
Expression qui retourne une référence à un type d'entité.
- ROW ( row_expression )
Expression qui retourne des enregistrements anonymes, structurellement typés à partir d'une ou plusieurs valeurs. Pour plus d'informations, consultez ROW (Entity SQL).
Notes
Plusieurs fonctions du même nom peuvent être déclarées inline, à condition que les signatures des fonctions soient différentes. Pour plus d'informations, consultez Résolution de surcharge des fonctions (Entity SQL).
Une fonction incluse peut être appelée dans une commande Entity SQL après seulement qu'elle a été définie dans cette commande. Toutefois, une fonction incluse peut être appelée au sein d'une autre fonction incluse avant ou après la définition de la fonction appelée. Dans l'exemple suivant, la fonction A appelle la fonction B avant que la fonction B soit définie :
Function A() as ('A calls B. ' + B())
Function B() as ('B was called.')
A()
Pour plus d'informations, consultez Procédure : appeler une fonction définie par l'utilisateur (Entity Framework).
Les fonctions peuvent également être déclarées dans le modèle lui-même. Les fonctions déclarées dans le modèle sont exécutées de la même façon que les fonctions déclarées inline dans la commande. Pour plus d'informations, consultez Fonctions définies par l'utilisateur (Entity SQL).
Exemple
La commande Entity SQL suivante définit une fonction Products qui accepte une valeur entière pour filtrer les produits retournés.
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
La commande Entity SQL suivante définit une fonction StringReturnsCollection qui accepte une collection de chaînes pour filtrer les contacts retournés.
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)