함수(Entity SQL)
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 )
}
인수
function-name
함수의 이름입니다.
parameter-name
함수에 있는 매개 변수의 이름입니다.
function_expression
함수인 유효한 Entity SQL 식입니다. 함수의 명령은 함수에 전달된 parameter_name
매개 변수에 대해 작동할 수 있습니다.
data_type
지원되는 형식의 이름입니다.
COLLECTION ( <type_definition>
)
지원되는 형식, 행 또는 참조 컬렉션을 반환하는 식입니다.
REF (data_type
)
엔터티 형식에 대한 참조를 반환하는 식입니다.
ROW (row_expression
)
하나 이상의 값에서 구조적으로 형식화된 익명 레코드를 반환하는 식입니다. 자세한 내용은 ROW을 참조하십시오.
설명
함수 시그니처가 다르면 이름이 같은 여러 함수를 인라인으로 선언할 수 있습니다. 자세한 내용은 Function Overload Resolution을 참조하세요.
인라인 함수는 Entity SQL 명령에서 정의된 이후에야 해당 명령에서 호출될 수 있습니다. 그러나 인라인 함수는 호출된 함수가 정의되기 이전 또는 이후에 다른 인라인 함수 내에서 호출될 수 있습니다. 다음 예제에서는 함수 B가 정의되기 전에 함수 A에서 함수 B를 호출합니다.
Function A() as ('A calls B. ' + B())
Function B() as ('B was called.')
A()
자세한 내용은 방법: 사용자 정의 함수 호출을 참조하세요.
함수는 모델 자체에서도 선언할 수 있습니다. 모델에서 선언된 함수는 명령에서 인라인으로 선언된 함수와 동일한 방식으로 실행됩니다. 자세한 내용은 사용자 정의 함수를 참조하세요.
예 1
다음 Entity SQL 명령에서는 정수 값을 사용하여 반환된 제품을 필터링하는 Products
함수를 정의합니다.
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
예제 2
다음 Entity SQL 명령에서는 문자열 컬렉션을 사용하여 반환된 연락처를 필터링하는 StringReturnsCollection
함수를 정의합니다.
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)