linq存储过程曾经一度困扰我。我下定决心要研究个明白,在我的仔细分析下,终于明白一些了,现在把得到的成果和大家分享一下。
成都创新互联专注于企业成都全网营销推广、网站重做改版、峡江网站定制设计、自适应品牌网站建设、H5页面制作、商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为峡江等各大城市提供网站开发制作服务。
linq存储过程默认生成的代码是ISingleResult的,也就是只能返回一条结果集,我们先动手脚,将其改成IMultipleResults 的.实体类根据不同情况更改.
linq存储过程更改前:
- [Function(Name="dbo.MeterTaskStat")]
- public ISingleResult
MeterTaskStat - ([Parameter(Name="MeterTaskType", DbType="Int")]
- System.Nullable
meterTaskType, - [Parameter(Name="StartDate", DbType="DateTime")]
- System.Nullable
startDate, - [Parameter(Name="EndDate", DbType="DateTime")]
- System.Nullable
endDate) - {
- IExecuteResult result =
- this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),
- meterTaskType, startDate, endDate);
- return ((ISingleResult
)(result.ReturnValue)); - }
linq存储过程更改后:
- [Function(Name="dbo.MeterTaskStat")]
- [ResultType(typeof(TaskStatData))]
- public IMultipleResults MeterTaskStat
- ([Parameter(Name = "MeterTaskType", DbType = "Int")]
- System.Nullable
meterTaskType, - [Parameter(Name = "StartDate", DbType = "DateTime")]
- System.Nullable startDate,
- [Parameter(Name = "EndDate", DbType = "DateTime")]
- System.Nullable endDate)
- {
- IExecuteResult result =
- this.ExecuteMethodCall
- (this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),
- meterTaskType, startDate, endDate);
- return ((IMultipleResults)(result.ReturnValue));
- }
注意到 多一条: [ResultType(typeof(TaskStatData))] 的记录吧,简单介绍一下,必须得为linq存储过程的结果返回一个实体类型,而TaskStatData就是自己定义的类,[ResultType(typeof(TaskStatData))]必须加上,加linq存储过程回值.
linq存储过程:
- set ANSI_NULLS ON
- set QUOTED_IDENTIFIER ON
- go
- -- ===================================================
- -- Author:MaHong
- -- Create date: 2008-09-11
- -- Description: 根据口径统计某段时间内水表复装任务信息
- -- ===================================================
- ALTER PROCEDURE [dbo].[MeterTaskStat]
- @MeterTaskType INT,
- @StartDate DateTime,
- @EndDate DateTime
- AS
- BEGIN
- SET NOCOUNT ON;
- SELECT MeterCaliberName,SUM(Requisition) AS
- RequisitionCount,SUM(Approve) AS ApproveCount,
- SUM(Disapprove) AS DisapproveCount,SUM(WaitWork) AS WaitWorkCount,
- SUM(CompleteY) AS CompleteYCount,SUM(CompleteN) AS CompleteNCount,
- SUM(Requisition+Approve+Disapprove+WaitWork+CompleteY+CompleteN) AS
- Subtotal
- FROM (SELECT MeterCaliberName
- ,CASE WHEN MeterTaskStatus=0 THEN 1 ELSE 0 END Requisition
- ,CASE WHEN MeterTaskStatus=1 THEN 1 ELSE 0 END Approve
- ,CASE WHEN MeterTaskStatus=11 THEN 1 ELSE 0 END Disapprove
- ,CASE WHEN MeterTaskStatus=2 THEN 1 ELSE 0 END WaitWork
- ,CASE WHEN MeterTaskStatus=4 THEN 1 ELSE 0 END CompleteY
- ,CASE WHEN MeterTaskStatus=5 THEN 1 ELSE 0 END CompleteN
- FROM View_MeterTaskMaintain WHERE [MeterTaskType] =
- @MeterTaskType AND StartDate BETWEEN @StartDate AND @EndDate) tempTable
- GROUP BY MeterCaliberName
- END
linq存储过程之在business中间层直接调用:
- public class StatTaskControl : ControlBase
- {
- public IEnumerable GetStatInfo
- (TaskType type, DateTime startDate, DateTime endDate)
- {
- IMultipleResults info =
- Context.MeterTaskStat((int)type, startDate, endDate);
- IEnumerable data = info.GetResult ();
- return data;
- }
- }
linq存储过程之ui层获取:
- protected void StatButton_Click(object sender, EventArgs e)
- {
- DateTime startDate = DateTime.Parse(StartDate.Text);
- DateTime endDate = DateTime.Parse(EndDate.Text);
- TaskType type = TaskType.Remove;
- IEnumerable info =
- _control.GetStatInfo(type, startDate, endDate);
- List data = info.ToList();
- RemoveGridView.DataSource = data;
- RemoveGridView.DataBind();
- }
整个linq存储过程大概就是这么几步.也不是太困难!
文章名称:教你如何实现linq存储过程返回多条结果集
当前URL:http://www.shufengxianlan.com/qtweb/news0/94000.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联