FUNCTION (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 命令中定義,才能在 Entity SQL 命令中呼叫。 不過,在定義呼叫的函式之前或之後,可在另一個內嵌函式中呼叫內嵌函式。 在下列範例中,在定義函式 B 之前,函式 A 呼叫函式 B:
Function A() as ('A calls B. ' + B())
Function B() as ('B was called.')
A()
如需詳細資訊,請參閱 How to: Call a User-Defined Function。
函式也可以在模型本身進行宣告。 在模型中宣告的函式,會與在命令中宣告為內嵌的函式一樣,以相同的方式執行。 如需詳細資訊,請參閱使用者定義函式。
範例 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)