Linq有很多值得学习的地方,这里我们主要介绍Linq结果集形状,包括介绍 ResultTypeAttribute 属性适用于返回多个结果类型的存储过程等方面。
成都创新互联公司是专业的民权网站建设公司,民权接单;提供网站制作、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行民权网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
当存储过程可以返回多个Linq结果集形状时,返回类型无法强类型化为单个投影形状。尽管 LINQ to SQL 可以生成所有可能的投影类型,但它无法获知将以何种顺序返回它们。 ResultTypeAttribute 属性适用于返回多个结果类型的存储过程,用以指定该过程可以返回的类型的集合。
在下面的 SQL 代码示例中,Linq结果集形状取决于输入(param1 = 1或param1 = 2)。我们不知道先返回哪个投影。
- 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设计器内,它自动生成了以下代码段:
- [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会把多结果集存储过程识别为单结果集的存储过程,默认生成的代码我们要手动修改一下,要求返回多个结果集,像这样:
- [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));
- }
我们分别定义了两个分部类,用于指定返回的类型。这样就可以使用了,下面代码直接调用,分别返回各自的结果集合。
- //返回全部Customer结果集
- IMultipleResults result = db.Whole_Or_Partial_Customers_Set(1);
- IEnumerable
shape1 = - result.GetResult
(); - foreach (WholeCustomersSetResult compName in shape1)
- {
- Console.WriteLine(compName.CompanyName);
- }
- //返回部分Customer结果集
- result = db.Whole_Or_Partial_Customers_Set(2);
- IEnumerable
shape2 = - result.GetResult
(); - foreach (PartialCustomersSetResult con in shape2)
- {
- Console.WriteLine(con.ContactName);
- }
语句描述:这个实例使用存储过程返回“WA”地区中的一组客户。返回的Linq结果集形状取决于传入的参数。如果参数等于 1,则返回所有客户属性。如果参数等于2,则返回ContactName属性。
【编辑推荐】
新闻标题:Linq结果集形状概述
标题路径:http://www.csdahua.cn/qtweb/news42/303492.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网