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

LINQ to SQL 儲存程序回傳多結果集實作

     編輯:關於.NET

LINQ to SQL 預設將儲存程序對應為 ISingleResult,僅支援單一結果集。若需多結果集,需手動修改生成代碼為 IMultipleResults。

修改前後對比

修改前

[Function(Name="dbo.MeterTaskStat")]
public ISingleResult<XXXX> MeterTaskStat(...) { ... }

修改後

[Function(Name="dbo.MeterTaskStat")]
[ResultType(typeof(TaskStatData))]  // 必須指定實體型別
public IMultipleResults MeterTaskStat(...) { ... }

關鍵點:加上 [ResultType] 屬性,回傳型別改為 IMultipleResults,ExecuteMethodCall 回傳值轉型為 IMultipleResults。

儲存程序範例

ALTER PROCEDURE [dbo].[MeterTaskStat] @MeterTaskType INT, @StartDate DateTime, @EndDate DateTime
AS BEGIN
    SET NOCOUNT ON;
    SELECT MeterCaliberName, SUM(Requisition) AS RequisitionCount, ... FROM (...) tempTable GROUP BY MeterCaliberName
    -- 此處只有一個結果集,若有多個 SELECT 即為多結果集
END

業務層與 UI 層呼叫

// 業務層
public IEnumerable GetStatInfo(TaskType type, DateTime startDate, DateTime endDate) {
    IMultipleResults info = Context.MeterTaskStat((int)type, startDate, endDate);
    return info.GetResult<TaskStatData>();
}

// UI 層
protected void StatButton_Click(...) {
    var info = _control.GetStatInfo(type, startDate, endDate);
    RemoveGridView.DataSource = info.ToList();
    RemoveGridView.DataBind();
}

多結果集時,依序呼叫 GetResult<T>() 取得各結果集,須與 SP 中 SELECT 順序一致。

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