Linq存儲(chǔ)過(guò)程返回詳解
學(xué)習(xí)Linq時(shí),經(jīng)常會(huì)遇到Linq存儲(chǔ)過(guò)程返回問(wèn)題,這里將介紹Linq存儲(chǔ)過(guò)程返回問(wèn)題的解決方法。
存儲(chǔ)過(guò)程
在我們編寫(xiě)程序中,往往需要一些存儲(chǔ)過(guò)程,在LINQ to SQL中怎么使用呢?也許比原來(lái)的更簡(jiǎn)單些。下面我們以NORTHWND.MDF數(shù)據(jù)庫(kù)中自帶的幾個(gè)存儲(chǔ)過(guò)程來(lái)理解一下。
1.標(biāo)量返回
在數(shù)據(jù)庫(kù)中,有名為Customers Count By Region的存儲(chǔ)過(guò)程。該Linq存儲(chǔ)過(guò)程返回顧客所在"WA"區(qū)域的數(shù)量。
- 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
我們只要把這個(gè)存儲(chǔ)過(guò)程拖到O/R設(shè)計(jì)器內(nèi),它自動(dòng)生成了以下代碼段:
- [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));
- }
我們需要時(shí),直接調(diào)用就可以了,例如:
- int count = db.CustomersCountByRegion("WA");
- Console.WriteLine(count);
語(yǔ)句描述:這個(gè)實(shí)例使用Linq存儲(chǔ)過(guò)程返回在“WA”地區(qū)的客戶(hù)數(shù)。
2.單一結(jié)果集
從數(shù)據(jù)庫(kù)中返回行集合,并包含用于篩選結(jié)果的輸入?yún)?shù)。 當(dāng)我們執(zhí)行返回行集合的存儲(chǔ)過(guò)程時(shí),會(huì)用到結(jié)果類(lèi),它存儲(chǔ)從存儲(chǔ)過(guò)程中返回的結(jié)果。
下面的示例表示一個(gè)存儲(chǔ)過(guò)程,該Linq存儲(chǔ)過(guò)程返回客戶(hù)行并使用輸入?yún)?shù)來(lái)僅返回將“London”列為客戶(hù)城市的那些行的固定幾列。
- 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設(shè)計(jì)器內(nèi),它自動(dòng)生成了以下代碼段:
- [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));
- }
我們用下面的代碼調(diào)用:
- 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);
- }
語(yǔ)句描述:這個(gè)實(shí)例使用Linq存儲(chǔ)過(guò)程返回在倫敦的客戶(hù)的 CustomerID和City。
【編輯推薦】