Linq存儲過程返回詳解
學習Linq時,經常會遇到Linq存儲過程返回問題,這里將介紹Linq存儲過程返回問題的解決方法。
存儲過程
在我們編寫程序中,往往需要一些存儲過程,在LINQ to SQL中怎么使用呢?也許比原來的更簡單些。下面我們以NORTHWND.MDF數據庫中自帶的幾個存儲過程來理解一下。
1.標量返回
在數據庫中,有名為Customers Count By Region的存儲過程。該Linq存儲過程返回顧客所在"WA"區域的數量。
- ALTER PROCEDURE [dbo].[NonRowset]
- (@param1 NVARCHAR(15))
- AS
- BEGIN
- SET NOCOUNT ON;
- DECLARE @count int
- SELECT @count = COUNT(*)FROM Customers
- WHERECustomers.Region = @Param1
- RETURN @count
- END
我們只要把這個存儲過程拖到O/R設計器內,它自動生成了以下代碼段:
- [Function(Name = "dbo.[Customers Count By Region]")]
- public int Customers_Count_By_Region([Parameter
- (DbType = "NVarChar(15)")] string param1)
- {
- IExecuteResult result = this.ExecuteMethodCall(this,
- ((MethodInfo)(MethodInfo.GetCurrentMethod())), param1);
- return ((int)(result.ReturnValue));
- }
我們需要時,直接調用就可以了,例如:
- int count = db.CustomersCountByRegion("WA");
- Console.WriteLine(count);
語句描述:這個實例使用Linq存儲過程返回在“WA”地區的客戶數。
2.單一結果集
從數據庫中返回行集合,并包含用于篩選結果的輸入參數。 當我們執行返回行集合的存儲過程時,會用到結果類,它存儲從存儲過程中返回的結果。
下面的示例表示一個存儲過程,該Linq存儲過程返回客戶行并使用輸入參數來僅返回將“London”列為客戶城市的那些行的固定幾列。
- ALTER PROCEDURE [dbo].[Customers By City]
- -- Add the parameters for the stored procedure here
- (@param1 NVARCHAR(20))
- AS
- BEGIN
- -- SET NOCOUNT ON added to prevent extra result sets from
- -- interfering with SELECT statements.
- SET NOCOUNT ON;
- SELECT CustomerID, ContactName, CompanyName, City from
- Customers as c where c.City=@param1
- END
拖到O/R設計器內,它自動生成了以下代碼段:
- [Function(Name="dbo.[Customers By City]")]
- public ISingleResult<Customers_By_CityResult> Customers_By_City(
- [Parameter(DbType="NVarChar(20)")] string param1)
- {
- IExecuteResult result = this.ExecuteMethodCall(this, (
- (MethodInfo)(MethodInfo.GetCurrentMethod())), param1);
- return ((ISingleResult<Customers_By_CityResult>)
- (result.ReturnValue));
- }
我們用下面的代碼調用:
- ISingleResult<Customers_By_CityResult> result =
- db.Customers_By_City("London");
- foreach (Customers_By_CityResult cust in result)
- {
- Console.WriteLine("CustID={0}; City={1}", cust.CustomerID,
- cust.City);
- }
語句描述:這個實例使用Linq存儲過程返回在倫敦的客戶的 CustomerID和City。
【編輯推薦】