LINQ to SQL 支援將 SQL Server 使用者定義函數(UDF)映射為 .NET 方法,透過 O/R 設計師拖曳自動生成對應程式碼。
FunctionAttribute、ParameterAttribute)不符合上述形式將拋出 InvalidOperationException。
ALTER FUNCTION [dbo].[TotalProductUnitPriceByCategory](@categoryID int)
RETURNS Money
AS BEGIN
DECLARE @ResultVar Money
SELECT @ResultVar = (SELECT SUM(UnitPrice) FROM Products WHERE CategoryID = @categoryID)
RETURN @ResultVar
END
[Function(Name="dbo.TotalProductUnitPriceByCategory", IsComposable=true)]
public System.Nullable<decimal> TotalProductUnitPriceByCategory(
[Parameter(DbType="Int")] System.Nullable<int> categoryID)
{
return ((System.Nullable<decimal>)(
this.ExecuteMethodCall(this, MethodInfo.GetCurrentMethod(), categoryID).ReturnValue));
}
var q = from c in db.Categories
select new {
c.CategoryID,
TotalUnitPrice = db.TotalProductUnitPriceByCategory(c.CategoryID)
};
SELECT [t0].[CategoryID],
CONVERT(Decimal(29,4), [dbo].[TotalProductUnitPriceByCategory]([t0].[CategoryID])) AS [TotalUnitPrice]
FROM [dbo].[Categories] AS [t0]
函數在 SQL 中原生執行,效能優於客戶端計算。