此代码主要示范如何以内联方式调用用户定义的函数。
在SQL Server中用户自定义的函数如下:
CREATE FUNCTION ReverseCustName(@CustomerID nchar(5))
RETURNS nvarchar(30)
AS
BEGIN
DECLARE @CustomerName nvarchar(30)
SELECT @CustomerName = [ContactName] FROM [Customers]
WHERE [CustomerID] = @CustomerID
RETURN @CustomerName
END
将上面的自定义函数映射到对象模型中的函数,然后使用下面的方式调用映射函数。
NorthwindDataContext db = new NorthwindDataContext(@"C:/LINQ/Northwind.mdf");
var PartialCustomers =
from CustomerObject in db.Customers
select new
{
CustomerTitle = CustomerObject.ContactTitle,
CustomerName = db.ReverseCustName(CustomerObject.CustomerID)
};
foreach (var CustomerObject in PartialCustomers)
{
Console.WriteLine("---------------------");
Console.WriteLine("CustomerName={0}",
CustomerObject.CustomerName);
Console.WriteLine("CustomerTitle={0}",
CustomerObject.CustomerTitle);
Thread.Sleep(500);
}
上面的LINQ查询会生成如下的SQL语句,可以看到用户自定义的函数包含在了这条SQL语句中。
SELECT [t0].[ContactTitle] AS [CustomerTitle],
[dbo].[ReverseCustName]([t0].[CustomerID]) AS [CustomerName]
FROM [dbo].[Customers] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8