LINQ - 在 LINQ 使用 Stored Procedure Part 3 (使用 ExecuteQuery<TResult> 來呼叫 Stored Procedure)

摘要:LINQ - 在 LINQ 使用 Stored Procedure Part 3 (使用 ExecuteQuery 來呼叫 Stored Procedure)

前兩篇提到的方式,不知是否太過複雜或者太難以接受,最近又發現了幾種用法,將於本篇與下一篇與各位有緣人分享。本篇一樣是說明如何呼叫 Stored Procedure 來呈現資料,就如上述,之前寫的或許太過複雜,甚至難以接受,本篇將教您如何輕鬆使用。以下就來說明運用方式:

步驟一:撰寫一個 Stored Procedure

Code:

ALTER PROCEDURE [dbo].[New_CustOrderHist] @CustomerID nchar(5)
AS

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[#f_New_CustOrderHist]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
 DROP TABLE [dbo].[#f_New_CustOrderHist]

CREATE TABLE #f_New_CustOrderHist (
  [f_ProductName] nvarchar(1000) NULL,
  [f_Total] int NULL
 )

Insert into #f_New_CustOrderHist
SELECT ProductName, Total=SUM(Quantity)
FROM Products P, [Order Details] OD, Orders O, Customers C
WHERE C.CustomerID = @CustomerID
AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID
GROUP BY ProductName

Select f_ProductName, f_Total From #f_New_CustOrderHist Order By f_ProductName

步驟二:再專案中,建立一個 CustOrderHistiItem.cs 的 Class,來接
Stored Procedure 所查詢出的欄位結果。



步驟三:在 CustOrderHistiItem.cs 中,建入以下的程式碼,這部份的命名,必須與 Stored Procedure 查詢出的欄位名稱相同喔

Code:

class CustOrderHistiItem
{
    public string f_ProductName { get; set; }
    public int f_Total { get; set; }
}

步驟四:使用 LINQ 中的 ExecuteQuery<TResult> 來呼叫 Stored Procedure

Code:

 MyDataContext db = new MyDataContext();

string strCustomerID = "ALFKI";

var result = db.ExecuteQuery<CustOrderHistiItem>("Exec dbo.New_CustOrderHist " + strCustomerID);

dataGridView1.DataSource = result.ToList();

步驟五:結果



是否有比之前的寫法簡單呢!? 下一篇將來介紹 LINQ 中的 ExecuteCommand 如何來呼叫 Stored Procedure。