教你如何实现linq存储过程返回多条结果集
创始人
2024-06-07 08:00:52
0

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

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));  

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));  

注意到 多一条: [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  
  33.  

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. }  

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存储过程大概就是这么几步.也不是太困难!

【编辑推荐】

  1. 详谈Linq查询结果分析的方法
  2. 简简单单学习Linq查询语法
  3. 详细阐述Linq插入数据的操作方法
  4. 浅析Linq插入数据的实现方法
  5. 简单解决Linq多条件组合问题

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...