首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

LINQ to SQL 使用者定義函數完整整合指南(15):標量函數、表值函數與對應屬性標註

     編輯:關於ASP.NET

LINQ to SQL 支援將 SQL Server 使用者定義函數(UDF)映射為 .NET 方法,透過 O/R 設計師拖曳自動生成對應程式碼。

支援的函數形式

  1. 標記正確屬性的方法(FunctionAttribute、ParameterAttribute)
  2. LINQ to SQL 專用靜態 SQL 方法
  3. .NET Framework 內建支援的轉譯方法
不符合上述形式將拋出 InvalidOperationException。

實戰範例:標量函數 TotalProductUnitPriceByCategory

SQL 定義

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

O/R 設計師生成的對應方法

[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));
}

LINQ 查詢中呼叫

var q = from c in db.Categories
        select new {
            c.CategoryID,
            TotalUnitPrice = db.TotalProductUnitPriceByCategory(c.CategoryID)
        };

生成 SQL

SELECT [t0].[CategoryID], 
       CONVERT(Decimal(29,4), [dbo].[TotalProductUnitPriceByCategory]([t0].[CategoryID])) AS [TotalUnitPrice]
FROM [dbo].[Categories] AS [t0]

函數在 SQL 中原生執行,效能優於客戶端計算。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved