这篇文章将为大家详细讲解有关如何实现linq存储过程返回多条结果集,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
linq存储过程默认生成的代码是ISingleResult的,也就是只能返回一条结果集,我们先动手脚,将其改成IMultipleResults 的.实体类根据不同情况更改.
linq存储过程更改前:
[Function(Name="dbo.MeterTaskStat")] public ISingleResult<XXXX> MeterTaskStat([Parameter(Name="MeterTaskType", DbType="Int")] System.Nullable<int> meterTaskType, [Parameter(Name="StartDate", DbType="DateTime")] System.Nullable<System.DateTime> startDate, [Parameter(Name="EndDate", DbType="DateTime")] System.Nullable<System.DateTime> endDate) { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), meterTaskType, startDate, endDate); return ((ISingleResult<XXXXXX>)(result.ReturnValue)); }
linq存储过程更改后:
[Function(Name="dbo.MeterTaskStat")] [ResultType(typeof(TaskStatData))] public IMultipleResults MeterTaskStat([Parameter(Name = "MeterTaskType", DbType = "Int")] System.Nullable<int> 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存储过程返回多条结果集就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。