Partager via


FUNCTION (Entity SQL)

Définit une fonction dans l’étendue d’une commande de requête Entity SQL.

Syntaxe

FUNCTION function-name  
( [ { parameter_name <type_definition>
        [ ,...n ]  
  ]  
) AS ( function_expression )
  
<type_definition>::=  
    { data_type | COLLECTION ( <type_definition> )
                | REF ( data_type )
                | ROW ( row_expression )
        }

Les arguments

function-name
Nom de la fonction.

parameter-name
Nom d’un paramètre dans la fonction.

function_expression
Expression Entity SQL valide qui est la fonction. La commande de la fonction peut agir sur parameter_name les paramètres passés à la fonction.

data_type
Nom d’un type pris en charge.

COLLECTION ( <type_definition> )
Expression qui retourne une collection de types, de lignes ou de 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 et structurellement typés à partir d’une ou plusieurs valeurs. Pour plus d’informations, consultez ROW.

Remarques

Plusieurs fonctions portant le même nom peuvent être déclarées inline, tant que les signatures de fonction sont différentes. Pour plus d’informations, consultez Résolution de surcharge de fonction.

Une fonction inline peut être appelée dans une commande Entity SQL uniquement une fois qu’elle a été définie dans cette commande. Toutefois, une fonction inline peut être appelée à l’intérieur d’une autre fonction inline avant ou après la définition de la fonction appelée. Dans l’exemple suivant, la fonction A appelle la fonction B avant la définition de la fonction B :

Function A() as ('A calls B. ' + B())

Function B() as ('B was called.')

A()

Pour plus d’informations, consultez Guide pratique pour appeler une fonction User-Defined.

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 User-Defined Functions.

Exemple 1

La commande Entity SQL suivante définit une fonction Products qui prend 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

Exemple 2

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)

Voir aussi