新聞中心
Linq有很多值得學(xué)習(xí)的地方,這里我們主要介紹Linq結(jié)果集形狀,包括介紹 ResultTypeAttribute 屬性適用于返回多個(gè)結(jié)果類型的存儲過程等方面。

成都創(chuàng)新互聯(lián)公司是專業(yè)的民權(quán)網(wǎng)站建設(shè)公司,民權(quán)接單;提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行民權(quán)網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
當(dāng)存儲過程可以返回多個(gè)Linq結(jié)果集形狀時(shí),返回類型無法強(qiáng)類型化為單個(gè)投影形狀。盡管 LINQ to SQL 可以生成所有可能的投影類型,但它無法獲知將以何種順序返回它們。 ResultTypeAttribute 屬性適用于返回多個(gè)結(jié)果類型的存儲過程,用以指定該過程可以返回的類型的集合。
在下面的 SQL 代碼示例中,Linq結(jié)果集形狀取決于輸入(param1 = 1或param1 = 2)。我們不知道先返回哪個(gè)投影。
- ALTER PROCEDURE [dbo].[SingleRowset_MultiShape]
- -- Add the parameters for the stored procedure here
- (@param1 int )
- AS
- BEGIN
- -- SET NOCOUNT ON added to prevent extra result sets from
- -- interfering with SELECT statements.
- SET NOCOUNT ON;
- if(@param1 = 1)
- SELECT * from Customers as c where c.Region = 'WA'
- else if (@param1 = 2)
- SELECT CustomerID, ContactName, CompanyName from
- Customers as c where c.Region = 'WA'
- END
拖到O/R設(shè)計(jì)器內(nèi),它自動生成了以下代碼段:
- [Function(Name="dbo.[Whole Or Partial Customers Set]")]
- public ISingleResult
- Whole_Or_Partial_Customers_Set([Parameter(DbType="Int")]
- System.Nullable
param1) - {
- IExecuteResult result = this.ExecuteMethodCall(this,
- ((MethodInfo)(MethodInfo.GetCurrentMethod())), param1);
- return ((ISingleResult
) - (result.ReturnValue));
- }
但是,VS2008會把多結(jié)果集存儲過程識別為單結(jié)果集的存儲過程,默認(rèn)生成的代碼我們要手動修改一下,要求返回多個(gè)結(jié)果集,像這樣:
- [Function(Name="dbo.[Whole Or Partial Customers Set]")]
- [ResultType(typeof(WholeCustomersSetResult))]
- [ResultType(typeof(PartialCustomersSetResult))]
- public IMultipleResults Whole_Or_Partial_Customers_Set([Parameter
- (DbType="Int")] System.Nullable
param1) - {
- IExecuteResult result = this.ExecuteMethodCall(this,
- ((MethodInfo)(MethodInfo.GetCurrentMethod())), param1);
- return ((IMultipleResults)(result.ReturnValue));
- }
我們分別定義了兩個(gè)分部類,用于指定返回的類型。這樣就可以使用了,下面代碼直接調(diào)用,分別返回各自的結(jié)果集合。
- //返回全部Customer結(jié)果集
- IMultipleResults result = db.Whole_Or_Partial_Customers_Set(1);
- IEnumerable
shape1 = - result.GetResult
(); - foreach (WholeCustomersSetResult compName in shape1)
- {
- Console.WriteLine(compName.CompanyName);
- }
- //返回部分Customer結(jié)果集
- result = db.Whole_Or_Partial_Customers_Set(2);
- IEnumerable
shape2 = - result.GetResult
(); - foreach (PartialCustomersSetResult con in shape2)
- {
- Console.WriteLine(con.ContactName);
- }
語句描述:這個(gè)實(shí)例使用存儲過程返回“WA”地區(qū)中的一組客戶。返回的Linq結(jié)果集形狀取決于傳入的參數(shù)。如果參數(shù)等于 1,則返回所有客戶屬性。如果參數(shù)等于2,則返回ContactName屬性。
【編輯推薦】
- LINQ to DataSet查詢詳解
- Linq實(shí)現(xiàn)XML轉(zhuǎn)換淺談
- Linq to SQL強(qiáng)類型DataContext
- Linq SelectMany學(xué)習(xí)經(jīng)驗(yàn)
- 使用LINQ進(jìn)行數(shù)據(jù)轉(zhuǎn)換剖析
網(wǎng)頁名稱:Linq結(jié)果集形狀概述
URL鏈接:http://www.fisionsoft.com.cn/article/dhpoedj.html


咨詢
建站咨詢
