FUNCTION (Entity SQL)
Definuje funkci v oboru příkazu dotazu 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 )
}
Argumenty
function-name
Název funkce.
parameter-name
Název parametru ve funkci.
function_expression
Platný výraz ENTITY SQL, který je funkcí. Příkaz ve funkci může pracovat s parameter_name
parametry předanými funkci.
data_type
Název podporovaného typu
COLLECTION ( <type_definition>
)
Výraz, který vrací kolekci podporovaných typů, řádků nebo odkazů.
ODKAZ (data_type
)
Výraz, který vrací odkaz na typ entity.
ŘÁDEK (row_expression
)
Výraz, který vrací anonymní záznamy se strukturálně zadanými záznamy z jedné nebo více hodnot. Další informace najdete v tématu ŘÁDEK.
Poznámky
Více funkcí se stejným názvem lze deklarovat jako vložené, pokud se podpisy funkce liší. Další informace naleznete v tématu Řešení přetížení funkce.
Vloženou funkci lze volat v příkazu Entity SQL až po jeho definování v daném příkazu. Vloženou funkci však lze volat uvnitř jiné vložené funkce buď před nebo po jeho definování. V následujícím příkladu funkce A volá funkci B před definováním funkce B:
Function A() as ('A calls B. ' + B())
Function B() as ('B was called.')
A()
Další informace naleznete v tématu Postupy: Volání uživatelem definované funkce.
Funkce lze deklarovat také v samotném modelu. Funkce deklarované v modelu se spouští stejným způsobem jako funkce deklarované v příkazu. Další informace naleznete v tématu Uživatelem definované funkce.
Příklad 1
Následující příkaz Entity SQL definuje funkci Products
, která přebírá celočíselnou hodnotu k filtrování vrácených produktů.
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
Příklad 2
Následující příkaz Entity SQL definuje funkci StringReturnsCollection
, která přebírá kolekci řetězců k filtrování vrácených kontaktů.
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)