千家信息网

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

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,这篇文章将为大家详细讲解有关如何实现linq存储过程返回多条结果集,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。linq存储过程默认生成的代码是ISi
千家信息网最后更新 2024年11月25日如何实现linq存储过程返回多条结果集

这篇文章将为大家详细讲解有关如何实现linq存储过程返回多条结果集,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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存储过程返回多条结果集就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0