Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linq和存储过程_Linq_Stored Procedures - Fatal编程技术网

linq和存储过程

linq和存储过程,linq,stored-procedures,Linq,Stored Procedures,我试图在LINQ中执行一个存储过程。在SQLServer中运行时,它返回多个字段,大多数是整数和浮点字段。但是当我在LINQ中调用存储过程时,它只返回0。下面是我调用存储过程的方式: var meterReadings = _database.MetricDataReport("20101127"); 下面是存储过程: ALTER PROCEDURE [dbo].[MetricDataReport] @FormDate VARCHAR(8) AS SET NOCOUNT ON /*T

我试图在LINQ中执行一个存储过程。在SQLServer中运行时,它返回多个字段,大多数是整数和浮点字段。但是当我在LINQ中调用存储过程时,它只返回0。下面是我调用存储过程的方式:

var meterReadings = _database.MetricDataReport("20101127");
下面是存储过程:

ALTER PROCEDURE [dbo].[MetricDataReport]
@FormDate VARCHAR(8)
AS
SET NOCOUNT ON  



/*Table To Hold Finished RecordSet*/
CREATE TABLE #OutputTable
(
    PkMetricMeterID INT,
    FkSiteID        INT,
    FourWeekReading FLOAT,
    LastWeekReading FLOAT,
    ThisWeekReading FLOAT,
    pkMeterID       INT,
    DecimalPlaces   INT

)

CREATE TABLE #WorkingTable
(
    PkMetricMeterID INT,
    FkSiteID        INT,
    FormDate        DATETIME,
    Reading         FLOAT,
    pkMeterID       INT,
    DecimalPlaces   INT
)   

-----------------------------------
---   Process Physical Meters   ---
-----------------------------------
    INSERT INTO #WorkingTable (PkMetricMeterID,FkSiteID,FormDate,Reading,pkMeterID,DecimalPlaces)
    SELECT
        luMetricMeters.PkMetricMeterID,
        LuMetricMeterList.FkSiteID,
        GetReadingsAndPriceLite.FormDate,
        GetReadingsAndPriceLite.CalculatedConsumption * GetReadingsAndPriceLite.ConversionFactor,
        luMetricMeterList.pkMeterID,            
        Meters.DecimalPlaces    
    FROM
        luMetricMeters 
    INNER JOIN
        luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID
    INNER JOIN  
        GetReadingsAndPriceLite ON GetReadingsAndPriceLite.pkMeterID = luMetricMeterList.pkMeterID
    INNER JOIN
        Meters ON Meters.PkMeterID = luMetricMeterList.pkMeterID
    WHERE
        GetReadingsAndPriceLite.FormDate <= @FormDate AND GetReadingsAndPriceLite.FormDate >= DATEADD(wk,-4,@FormDate)
--------------------------------------------
---   Process Virtual Meters (NON KPI)   ---
--------------------------------------------

---Check To See If Meter Needs Updating
DECLARE @CurrentMeterID INT
DECLARE MeterCursor Cursor FAST_FORWARD FOR
    SELECT 
        luMetricMeterList.pkMeterID
    FROM
        LuMetricMeters 
    INNER JOIN
        luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID
    INNER JOIN
        VirtualMeterReadings ON VirtualMeterReadings.MeterID = luMetricMeterList.pkMeterID
    WHERE
        VirtualMeterReadings.UpdateFlag = 1
OPEN MeterCursor
FETCH NEXT FROM MeterCursor INTO @CurrentMeterID
WHILE @@Fetch_Status=0
BEGIN
    EXEC UpdateVirtualReadings @CurrentMeterID
    FETCH NEXT FROM MeterCursor INTO @CurrentMeterID
END
CLOSE MeterCursor
DEALLOCATE MeterCursor


INSERT INTO #WorkingTable (PkMetricMeterID,FkSiteID,FormDate,Reading,pkMeterID,DecimalPlaces)
    SELECT
        luMetricMeters.PkMetricMeterID,
        LuMetricMeterList.FkSiteID,
        VirtualMeterReadings.FormDate,
        VirtualMeterReadings.Reading,
        LuMetricMeterList.pkMeterID,
        Meters.DecimalPlaces            
    FROM
        luMetricMeters 
    INNER JOIN
        luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID
    INNER JOIN  
        VirtualMeterReadings ON VirtualMeterReadings.MeterID = luMetricMeterList.pkMeterID
    INNER JOIN
        Meters ON Meters.PkMeterID = luMetricMeterList.pkMeterID
    WHERE
        VirtualMeterReadings.FormDate <= @FormDate AND VirtualMeterReadings.FormDate >= DATEADD(wk,-4,@FormDate)

SET NOCOUNT OFF

SELECT DISTINCT
    [#WorkingTable].PkMetricMeterID,
    #WorkingTable.FkSiteID,
    ThisWeekReading = (SELECT TOP 1 Reading FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID ANd workingTable1.FORMDATE = @FormDate),
    LastWeekReading = (SELECT TOP 1 Reading FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID ANd workingTable1.FORMDATE = DATEADD(d,-7,@FormDate)),
    FourWeekReading = (SELECT AVG(Reading) FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID),
    #WorkingTable.pkMeterID,
    #WorkingTable.DecimalPlaces
FROM
    [#WorkingTable]
ORDER BY    
    [#WorkingTable].PkMetricMeterID,
    [#WorkingTable].FkSiteID
ALTER过程[dbo].[MetricDataReport]
@FormDate VARCHAR(8)
像
不计较
/*用于保存已完成记录集的表*/
创建表#可输出
(
PkMetricMeterID INT,
FkSiteID INT,
四周阅读浮动,
上周的阅读浮动,
本周的阅读浮动,
pkMeterID INT,
小数点整数
)
创建表格#工作表格
(
PkMetricMeterID INT,
FkSiteID INT,
FormDate日期时间,
阅读浮动,
pkMeterID INT,
小数点整数
)   
-----------------------------------
---过程物理仪表---
-----------------------------------
插入#工作表(PkMetricMeterID、FkSiteID、FormDate、Reading、pkMeterID、DecimalPlaces)
选择
luMetricMeters.PkMetricMeterID,
LuMetricMeterList.FkSiteID,
GetReadingsAndPriceLite.FormDate,
GetReadingsAndPriceLite.CalculatedConsumption*GetReadingsAndPriceLite.ConversionFactor,
luMetricMeterList.pkMeterID,
米。小数点
从…起
光度计
内连接
luMetricMeterList.PkMetricMeterID=luMetricMeters.PkMetricMeterID上的luMetricMeterList
内连接
GetReadingsAndPriceLite.pkMeterID=luMetricMeterList.pkMeterID上的GetReadingsAndPriceLite
内连接
Meters ON Meters.PkMeterID=luMetricMeterList.PkMeterID
哪里
GetReadingsAndPriceLite.FormDate=DATEADD(wk,-4,@FormDate)
--------------------------------------------
---过程虚拟仪表(非KPI)---
--------------------------------------------
---检查仪表是否需要更新
声明@CurrentMeterID INT
将仪表或光标快进声明为
选择
luMetricMeterList.pkMeterID
从…起
光度计
内连接
luMetricMeterList.PkMetricMeterID=luMetricMeters.PkMetricMeterID上的luMetricMeterList
内连接
VirtualMetaReadings.MeterID=luMetricMeterList.pkMeterID上的VirtualMetaReadings
哪里
VirtualTerreadings.UpdateFlag=1
开式流量计
从MeterCursor获取下一个到@CurrentMeterID
而@@Fetch\u Status=0
开始
执行更新虚拟读数@CurrentMeterID
从MeterCursor获取下一个到@CurrentMeterID
终止
闭式流量计
释放计量器
插入#工作表(PkMetricMeterID、FkSiteID、FormDate、Reading、pkMeterID、DecimalPlaces)
选择
luMetricMeters.PkMetricMeterID,
LuMetricMeterList.FkSiteID,
VirtualTerreadings.FormDate,
虚拟阅读,阅读,
LuMetricMeterList.pkMeterID,
米。小数点
从…起
光度计
内连接
luMetricMeterList.PkMetricMeterID=luMetricMeters.PkMetricMeterID上的luMetricMeterList
内连接
VirtualMetaReadings.MeterID=luMetricMeterList.pkMeterID上的VirtualMetaReadings
内连接
Meters ON Meters.PkMeterID=luMetricMeterList.PkMeterID
哪里
VirtualMetaReadings.FormDate=DATEADD(wk,-4,@FormDate)
抵消
选择不同的
[#工作表].PkMetricMeterID,
#WorkingTable.FkSiteID,
ThisWeekReading=(从#WorkingTable WorkingTable1中选择前1个读数,其中WorkingTable1.PkMetricMeterID=#WorkingTable.PkMetricMeterID和[#WorkingTable]。FkSiteID=[WorkingTable1]。FkSiteID和WorkingTable1.FORMDATE=@FORMDATE),
LastWeekReading=(从#WorkingTable WorkingTable1中选择前1个读数,其中WorkingTable1.PkMetricMeterID=#WorkingTable.PkMetricMeterID和[#WorkingTable].FkSiteID=[WorkingTable1].FkSiteID和WorkingTable1.FORMDATE=DATEADD(d,-7,@FORMDATE)),
FourWeekReading=(从#WorkingTable WorkingTable1中选择平均(读数),其中WorkingTable1.PkMetricMeterID=#WorkingTable.PkMetricMeterID和[#WorkingTable].FkSiteID=[WorkingTable1].FkSiteID),
#WorkingTable.pkMeterID,
#工作表小数位数
从…起
[#工作台]
订购人
[#工作表].PkMetricMeterID,
[#工作表].FkSiteID

我对这方面的了解不够,看不出问题出在哪里,但您可能希望首先使用一个简单得多的存储过程来实现这一点。只返回一个简单列表的东西

另外,请看一下如何将存储过程与LINQtoSQL结合使用