教你如何实现linq存储过程返回多条结果集

linq存储过程曾经一度困扰我。我下定决心要研究个明白,在我的仔细分析下,终于明白一些了,现在把得到的成果和大家分享一下。

成都创新互联专注于企业成都全网营销推广、网站重做改版、峡江网站定制设计、自适应品牌网站建设、H5页面制作商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为峡江等各大城市提供网站开发制作服务。

linq存储过程默认生成的代码是ISingleResult的,也就是只能返回一条结果集,我们先动手脚,将其改成IMultipleResults 的.实体类根据不同情况更改.

linq存储过程更改前:

 
 
 
  1. [Function(Name="dbo.MeterTaskStat")]
  2. public ISingleResult MeterTaskStat
  3. ([Parameter(Name="MeterTaskType", DbType="Int")]
  4.  System.Nullable meterTaskType,
  5. [Parameter(Name="StartDate", DbType="DateTime")]
  6.  System.Nullable startDate,
  7.  [Parameter(Name="EndDate", DbType="DateTime")]
  8. System.Nullable endDate)
  9. {
  10.  IExecuteResult result =
  11. this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),
  12.  meterTaskType, startDate, endDate);
  13.  return ((ISingleResult)(result.ReturnValue));
  14. }

linq存储过程更改后:

 
 
 
  1. [Function(Name="dbo.MeterTaskStat")]
  2. [ResultType(typeof(TaskStatData))]
  3. public IMultipleResults MeterTaskStat
  4. ([Parameter(Name = "MeterTaskType", DbType = "Int")]
  5. System.Nullable meterTaskType,
  6. [Parameter(Name = "StartDate", DbType = "DateTime")]
  7.  System.Nullable  startDate, 
  8. [Parameter(Name = "EndDate", DbType = "DateTime")]
  9.  System.Nullable  endDate)  
  10. {
  11.  IExecuteResult result =
  12. this.ExecuteMethodCall
  13. (this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),
  14. meterTaskType, startDate, endDate);
  15. return ((IMultipleResults)(result.ReturnValue));
  16. }

注意到 多一条: [ResultType(typeof(TaskStatData))] 的记录吧,简单介绍一下,必须得为linq存储过程的结果返回一个实体类型,而TaskStatData就是自己定义的类,[ResultType(typeof(TaskStatData))]必须加上,加linq存储过程回值.

linq存储过程:

 
 
 
  1. set ANSI_NULLS ON
  2. set QUOTED_IDENTIFIER ON
  3. go
  4. -- ===================================================
  5. -- Author:MaHong
  6. -- Create date: 2008-09-11
  7. -- Description: 根据口径统计某段时间内水表复装任务信息
  8. -- ===================================================
  9. ALTER PROCEDURE [dbo].[MeterTaskStat]
  10.  @MeterTaskType INT,
  11.  @StartDate DateTime,
  12.  @EndDate DateTime
  13. AS
  14. BEGIN
  15.  SET NOCOUNT ON;
  16.  SELECT MeterCaliberName,SUM(Requisition) AS
  17.  RequisitionCount,SUM(Approve) AS ApproveCount,
  18.  SUM(Disapprove) AS DisapproveCount,SUM(WaitWork) AS WaitWorkCount, 
  19.  SUM(CompleteY) AS CompleteYCount,SUM(CompleteN) AS CompleteNCount,
  20.  SUM(Requisition+Approve+Disapprove+WaitWork+CompleteY+CompleteN) AS
  21.  Subtotal
  22.  FROM (SELECT MeterCaliberName
  23.  ,CASE WHEN MeterTaskStatus=0 THEN 1 ELSE 0 END Requisition 
  24.  ,CASE WHEN MeterTaskStatus=1 THEN 1 ELSE 0 END Approve 
  25.  ,CASE WHEN MeterTaskStatus=11 THEN 1 ELSE 0 END Disapprove 
  26.  ,CASE WHEN MeterTaskStatus=2 THEN 1 ELSE 0 END WaitWork 
  27.  ,CASE WHEN MeterTaskStatus=4 THEN 1 ELSE 0 END CompleteY 
  28.  ,CASE WHEN MeterTaskStatus=5 THEN 1 ELSE 0 END CompleteN
  29.  FROM View_MeterTaskMaintain WHERE [MeterTaskType] =
  30.  @MeterTaskType AND StartDate BETWEEN @StartDate AND @EndDate) tempTable
  31.  GROUP BY MeterCaliberName
  32. END

linq存储过程之在business中间层直接调用:

 
 
 
  1. public class StatTaskControl : ControlBase
  2. {
  3. public IEnumerable  GetStatInfo
  4. (TaskType type, DateTime startDate, DateTime endDate)
  5. {
  6. IMultipleResults info =
  7. Context.MeterTaskStat((int)type, startDate, endDate);
  8. IEnumerable  data = info.GetResult ();  
  9. return data;
  10. }
  11. }

linq存储过程之ui层获取:

 
 
 
  1. protected void StatButton_Click(object sender, EventArgs e)
  2. {
  3. DateTime startDate = DateTime.Parse(StartDate.Text);
  4. DateTime endDate = DateTime.Parse(EndDate.Text);
  5. TaskType type = TaskType.Remove;
  6. IEnumerable  info =
  7.  _control.GetStatInfo(type, startDate, endDate);
  8. List  data = info.ToList();  
  9. RemoveGridView.DataSource = data;
  10. RemoveGridView.DataBind();
  11. }

整个linq存储过程大概就是这么几步.也不是太困难!

文章名称:教你如何实现linq存储过程返回多条结果集
当前URL:http://www.shufengxianlan.com/qtweb/news0/94000.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联