如何:以内联方式调用用户定义的函数

尽管您可以内联调用用户定义的函数,但延迟执行的查询中包含的函数直到此查询执行时才会执行。 有关详细信息,请参阅 LINQ 查询简介 (C#)

当你在查询外部调用同一函数时,LINQ to SQL 会根据方法调用表达式创建一个简单查询。 下面是相应的 SQL 语法(@p0 参数绑定到传入的常量):

SELECT dbo.ReverseCustName(@p0)  

LINQ to SQL 创建以下内容:

string str = db.ReverseCustName("LINQ to SQL");
Dim str As String = db.ReverseCustName("LINQ to SQL")

示例

在下面的 LINQ to SQL 查询中,你可以看到对生成的用户定义函数方法ReverseCustName 的内联调用。 此函数不会立即执行,这是因为查询会延迟执行。 为此查询生成的 SQL 会转换成对数据库中用户定义函数的调用(请参见此查询后面的 SQL 代码)。

var custQuery =
    from cust in db.Customers
    select new {cust.ContactName, Title =
        db.ReverseCustName(cust.ContactTitle)};
Dim custQuery = _
    From cust In db.Customers _
    Select cust.ContactName, Title = _
    db.ReverseCustName(cust.ContactTitle)
SELECT [t0].[ContactName],  
    dbo.ReverseCustName([t0].[ContactTitle]) AS [Title]  
FROM [Customers] AS [t0]  

请参阅