在 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
支持的类型的名称。
集合( <type_definition>
)
返回受支持类型、行或引用集合的表达式。
REF (data_type
)
返回对实体类型的引用的表达式。
ROW (row_expression
)
一个表达式,该表达式从一个或多个值返回匿名的结构化类型记录。 有关详细信息,请参阅 ROW。
注解
只要函数签名不同,就可以以内联方式声明多个具有相同名称的函数。 有关详细信息,请参阅 函数重载解析。
仅在该命令中定义内联函数后,才能在实体 SQL 命令中调用内联函数。 但是,可以在定义调用函数之前或之后在另一个内联函数内调用内联函数。 在以下示例中,函数 A 在定义函数 B 之前调用函数 B:
Function A() as ('A calls B. ' + B())
Function B() as ('B was called.')
A()
有关详细信息,请参阅 “如何:调用 User-Defined 函数”。
还可以在模型本身中声明函数。 在模型中声明的函数的执行方式与命令中内联声明的函数相同。 有关详细信息,请参阅 User-Defined 函数。
示例 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)